@pinegraph/react-website-cdk-constructs
Advanced tools
Comparing version 0.0.4 to 0.0.5
@@ -35,1 +35,8 @@ import { RemovalPolicy } from "aws-cdk-lib"; | ||
} | ||
/** | ||
* @Deprecated | ||
* | ||
* This function is not meant to be used by others. For Pinegraph, reorganizing | ||
* resources into constructs causes the logical ids to change. See https://github.com/aws/aws-cdk-rfcs/issues/162 | ||
*/ | ||
export declare function constructConstructsFromProps(self: Construct, props: ReactWebsiteProps): void; |
251
lib/index.js
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.ReactWebsiteConstruct = void 0; | ||
exports.constructConstructsFromProps = exports.ReactWebsiteConstruct = void 0; | ||
const aws_cdk_lib_1 = require("aws-cdk-lib"); | ||
@@ -20,128 +20,139 @@ const aws_certificatemanager_1 = require("aws-cdk-lib/aws-certificatemanager"); | ||
super(scope, id); | ||
const domain = props.domainName; | ||
const allDomainNames = [domain]; | ||
const zones = {}; | ||
for (const d of allDomainNames) { | ||
const resourceId = getResourceId(d, "Zone"); | ||
zones[d] = aws_route53_1.HostedZone.fromLookup(this, resourceId, { | ||
domainName: domain, | ||
}); | ||
} | ||
const cloudfrontOAI = new aws_cloudfront_1.OriginAccessIdentity(this, "cloudfront-OAI", { | ||
comment: `OAI for ${domain}`, | ||
}); | ||
new aws_cdk_lib_1.CfnOutput(this, "Site", { value: "https://" + domain }); | ||
// Content bucket | ||
const siteBucket = new aws_s3_1.Bucket(this, "SiteBucket", { | ||
publicReadAccess: false, | ||
blockPublicAccess: aws_s3_1.BlockPublicAccess.BLOCK_ALL, | ||
removalPolicy: props.removalPolicy, | ||
autoDeleteObjects: props.removalPolicy === aws_cdk_lib_1.RemovalPolicy.DESTROY, | ||
}); | ||
// Grant access to cloudfront | ||
siteBucket.addToResourcePolicy(new aws_iam_1.PolicyStatement({ | ||
actions: ["s3:GetObject"], | ||
resources: [siteBucket.arnForObjects("*")], | ||
principals: [ | ||
new aws_iam_1.CanonicalUserPrincipal(cloudfrontOAI.cloudFrontOriginAccessIdentityS3CanonicalUserId), | ||
], | ||
})); | ||
new aws_cdk_lib_1.CfnOutput(this, "Bucket", { value: siteBucket.bucketName }); | ||
// TLS certificate | ||
const certificate = new aws_certificatemanager_1.DnsValidatedCertificate(this, "SiteCertificate", { | ||
constructConstructsFromProps(this, props); | ||
} | ||
} | ||
exports.ReactWebsiteConstruct = ReactWebsiteConstruct; | ||
/** | ||
* @Deprecated | ||
* | ||
* This function is not meant to be used by others. For Pinegraph, reorganizing | ||
* resources into constructs causes the logical ids to change. See https://github.com/aws/aws-cdk-rfcs/issues/162 | ||
*/ | ||
function constructConstructsFromProps(self, props) { | ||
const domain = props.domainName; | ||
const allDomainNames = [domain]; | ||
const zones = {}; | ||
for (const d of allDomainNames) { | ||
const resourceId = getResourceId(d, "Zone"); | ||
zones[d] = aws_route53_1.HostedZone.fromLookup(self, resourceId, { | ||
domainName: domain, | ||
subjectAlternativeNames: allDomainNames, | ||
hostedZone: zones[domain], | ||
region: "us-east-1", // Cloudfront only checks this region for certificates. | ||
}); | ||
new aws_cdk_lib_1.CfnOutput(this, "Certificate", { value: certificate.certificateArn }); | ||
const responseHeaderPolicy = props.responseHeaderPolicy || | ||
new aws_cloudfront_1.ResponseHeadersPolicy(this, "SecurityHeadersResponsePolicy", { | ||
comment: "Security headers response policy", | ||
securityHeadersBehavior: { | ||
contentSecurityPolicy: { | ||
override: true, | ||
contentSecurityPolicy: `default-src 'self';`, | ||
}, | ||
strictTransportSecurity: { | ||
override: true, | ||
accessControlMaxAge: aws_cdk_lib_1.Duration.days(365), | ||
includeSubdomains: true, | ||
preload: true, | ||
}, | ||
contentTypeOptions: { | ||
override: true, | ||
}, | ||
referrerPolicy: { | ||
override: true, | ||
referrerPolicy: aws_cloudfront_1.HeadersReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN, | ||
}, | ||
xssProtection: { | ||
override: true, | ||
protection: true, | ||
modeBlock: true, | ||
}, | ||
frameOptions: { | ||
override: true, | ||
frameOption: aws_cloudfront_1.HeadersFrameOption.DENY, | ||
}, | ||
} | ||
const cloudfrontOAI = new aws_cloudfront_1.OriginAccessIdentity(self, "cloudfront-OAI", { | ||
comment: `OAI for ${domain}`, | ||
}); | ||
new aws_cdk_lib_1.CfnOutput(self, "Site", { value: "https://" + domain }); | ||
// Content bucket | ||
const siteBucket = new aws_s3_1.Bucket(self, "SiteBucket", { | ||
bucketName: domain, | ||
publicReadAccess: false, | ||
blockPublicAccess: aws_s3_1.BlockPublicAccess.BLOCK_ALL, | ||
removalPolicy: props.removalPolicy, | ||
autoDeleteObjects: props.removalPolicy === aws_cdk_lib_1.RemovalPolicy.DESTROY, | ||
}); | ||
// Grant access to cloudfront | ||
siteBucket.addToResourcePolicy(new aws_iam_1.PolicyStatement({ | ||
actions: ["s3:GetObject"], | ||
resources: [siteBucket.arnForObjects("*")], | ||
principals: [ | ||
new aws_iam_1.CanonicalUserPrincipal(cloudfrontOAI.cloudFrontOriginAccessIdentityS3CanonicalUserId), | ||
], | ||
})); | ||
new aws_cdk_lib_1.CfnOutput(self, "Bucket", { value: siteBucket.bucketName }); | ||
// TLS certificate | ||
const certificate = new aws_certificatemanager_1.DnsValidatedCertificate(self, "SiteCertificate", { | ||
domainName: domain, | ||
subjectAlternativeNames: allDomainNames, | ||
hostedZone: zones[domain], | ||
region: "us-east-1", // Cloudfront only checks this region for certificates. | ||
}); | ||
new aws_cdk_lib_1.CfnOutput(self, "Certificate", { value: certificate.certificateArn }); | ||
const responseHeaderPolicy = props.responseHeaderPolicy || | ||
new aws_cloudfront_1.ResponseHeadersPolicy(self, "SecurityHeadersResponsePolicy", { | ||
comment: "Security headers response policy", | ||
securityHeadersBehavior: { | ||
contentSecurityPolicy: { | ||
override: true, | ||
contentSecurityPolicy: `default-src 'self';`, | ||
}, | ||
}); | ||
// CloudFront distribution | ||
const distribution = new aws_cloudfront_1.Distribution(this, "SiteDistribution", { | ||
certificate: certificate, | ||
domainNames: allDomainNames, | ||
comment: props.domainName, | ||
minimumProtocolVersion: aws_cloudfront_1.SecurityPolicyProtocol.TLS_V1_2016, | ||
defaultBehavior: { | ||
origin: new aws_cloudfront_origins_1.S3Origin(siteBucket, { | ||
originAccessIdentity: cloudfrontOAI, | ||
}), | ||
edgeLambdas: props.edgeOriginRequestFunction | ||
? [ | ||
{ | ||
functionVersion: props.edgeOriginRequestFunction.currentVersion, | ||
eventType: aws_cloudfront_1.LambdaEdgeEventType.ORIGIN_REQUEST, | ||
}, | ||
] | ||
: [], | ||
compress: true, | ||
allowedMethods: aws_cloudfront_1.AllowedMethods.ALLOW_GET_HEAD_OPTIONS, | ||
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, | ||
responseHeadersPolicy: responseHeaderPolicy, | ||
strictTransportSecurity: { | ||
override: true, | ||
accessControlMaxAge: aws_cdk_lib_1.Duration.days(365), | ||
includeSubdomains: true, | ||
preload: true, | ||
}, | ||
contentTypeOptions: { | ||
override: true, | ||
}, | ||
referrerPolicy: { | ||
override: true, | ||
referrerPolicy: aws_cloudfront_1.HeadersReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN, | ||
}, | ||
xssProtection: { | ||
override: true, | ||
protection: true, | ||
modeBlock: true, | ||
}, | ||
frameOptions: { | ||
override: true, | ||
frameOption: aws_cloudfront_1.HeadersFrameOption.DENY, | ||
}, | ||
}, | ||
/** | ||
* This ensures that all routes end up using index.html for client side rendering. | ||
*/ | ||
errorResponses: [ | ||
{ | ||
httpStatus: 403, | ||
responseHttpStatus: 200, | ||
responsePagePath: "/index.html", | ||
}, | ||
], | ||
defaultRootObject: "index.html", | ||
}); | ||
new aws_cdk_lib_1.CfnOutput(this, "DistributionId", { | ||
value: distribution.distributionId, | ||
// CloudFront distribution | ||
const distribution = new aws_cloudfront_1.Distribution(self, "SiteDistribution", { | ||
certificate: certificate, | ||
domainNames: allDomainNames, | ||
comment: props.domainName, | ||
minimumProtocolVersion: aws_cloudfront_1.SecurityPolicyProtocol.TLS_V1_2016, | ||
defaultBehavior: { | ||
origin: new aws_cloudfront_origins_1.S3Origin(siteBucket, { | ||
originAccessIdentity: cloudfrontOAI, | ||
}), | ||
edgeLambdas: props.edgeOriginRequestFunction | ||
? [ | ||
{ | ||
functionVersion: props.edgeOriginRequestFunction.currentVersion, | ||
eventType: aws_cloudfront_1.LambdaEdgeEventType.ORIGIN_REQUEST, | ||
}, | ||
] | ||
: [], | ||
compress: true, | ||
allowedMethods: aws_cloudfront_1.AllowedMethods.ALLOW_GET_HEAD_OPTIONS, | ||
viewerProtocolPolicy: aws_cloudfront_1.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, | ||
responseHeadersPolicy: responseHeaderPolicy, | ||
}, | ||
/** | ||
* This ensures that all routes end up using index.html for client side rendering. | ||
*/ | ||
errorResponses: [ | ||
{ | ||
httpStatus: 403, | ||
responseHttpStatus: 200, | ||
responsePagePath: "/index.html", | ||
}, | ||
], | ||
defaultRootObject: "index.html", | ||
}); | ||
new aws_cdk_lib_1.CfnOutput(self, "DistributionId", { | ||
value: distribution.distributionId, | ||
}); | ||
// Route53 alias record for the CloudFront distribution] | ||
for (const d of allDomainNames) { | ||
const resourceId = getResourceId(d, "SiteAliasRecord"); | ||
new aws_route53_1.ARecord(self, resourceId, { | ||
recordName: d, | ||
target: aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.CloudFrontTarget(distribution)), | ||
zone: zones[d], | ||
}); | ||
// Route53 alias record for the CloudFront distribution] | ||
for (const d of allDomainNames) { | ||
const resourceId = getResourceId(d, "SiteAliasRecord"); | ||
new aws_route53_1.ARecord(this, resourceId, { | ||
recordName: d, | ||
target: aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.CloudFrontTarget(distribution)), | ||
zone: zones[d], | ||
}); | ||
} | ||
// Deploy site contents to S3 bucket | ||
new aws_s3_deployment_1.BucketDeployment(this, "DeployWithInvalidation", { | ||
sources: [props.sourceAsset], | ||
destinationBucket: siteBucket, | ||
distribution, | ||
distributionPaths: ["/*"], | ||
}); | ||
} | ||
// Deploy site contents to S3 bucket | ||
new aws_s3_deployment_1.BucketDeployment(self, "DeployWithInvalidation", { | ||
sources: [props.sourceAsset], | ||
destinationBucket: siteBucket, | ||
distribution, | ||
distributionPaths: ["/*"], | ||
}); | ||
} | ||
exports.ReactWebsiteConstruct = ReactWebsiteConstruct; | ||
exports.constructConstructsFromProps = constructConstructsFromProps; | ||
function capitalizeFirstLetter(str) { | ||
@@ -159,2 +170,2 @@ return str.charAt(0).toUpperCase() + str.slice(1); | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWlFO0FBQ2pFLCtFQUE2RTtBQUM3RSwrREFXb0M7QUFDcEMsK0VBQThEO0FBQzlELGlEQUE4RTtBQUM5RSx5REFLaUM7QUFDakMseUVBQW1FO0FBQ25FLCtDQUErRDtBQUMvRCxxRUFBMEU7QUFDMUUsMkNBQXVDO0FBOEJ2Qzs7R0FFRztBQUNILE1BQWEscUJBQXNCLFNBQVEsc0JBQVM7SUFDbEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNoRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDaEMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVoQyxNQUFNLEtBQUssR0FBb0MsRUFBRSxDQUFDO1FBQ2xELEtBQUssTUFBTSxDQUFDLElBQUksY0FBYyxFQUFFO1lBQzlCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDNUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLHdCQUFVLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ2pELFVBQVUsRUFBRSxNQUFNO2FBQ25CLENBQUMsQ0FBQztTQUNKO1FBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxxQ0FBb0IsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDckUsT0FBTyxFQUFFLFdBQVcsTUFBTSxFQUFFO1NBQzdCLENBQUMsQ0FBQztRQUVILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRTVELGlCQUFpQjtRQUNqQixNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQU0sQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ2hELGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsaUJBQWlCLEVBQUUsMEJBQWlCLENBQUMsU0FBUztZQUM5QyxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDbEMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGFBQWEsS0FBSywyQkFBYSxDQUFDLE9BQU87U0FDakUsQ0FBQyxDQUFDO1FBQ0gsNkJBQTZCO1FBQzdCLFVBQVUsQ0FBQyxtQkFBbUIsQ0FDNUIsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQztZQUN6QixTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLFVBQVUsRUFBRTtnQkFDVixJQUFJLGdDQUFzQixDQUN4QixhQUFhLENBQUMsK0NBQStDLENBQzlEO2FBQ0Y7U0FDRixDQUFDLENBQ0gsQ0FBQztRQUNGLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLGtCQUFrQjtRQUNsQixNQUFNLFdBQVcsR0FBRyxJQUFJLGdEQUF1QixDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRTtZQUN2RSxVQUFVLEVBQUUsTUFBTTtZQUNsQix1QkFBdUIsRUFBRSxjQUFjO1lBQ3ZDLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3pCLE1BQU0sRUFBRSxXQUFXLEVBQUUsdURBQXVEO1NBQzdFLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sb0JBQW9CLEdBQ3hCLEtBQUssQ0FBQyxvQkFBb0I7WUFDMUIsSUFBSSxzQ0FBcUIsQ0FBQyxJQUFJLEVBQUUsK0JBQStCLEVBQUU7Z0JBQy9ELE9BQU8sRUFBRSxrQ0FBa0M7Z0JBQzNDLHVCQUF1QixFQUFFO29CQUN2QixxQkFBcUIsRUFBRTt3QkFDckIsUUFBUSxFQUFFLElBQUk7d0JBQ2QscUJBQXFCLEVBQUUscUJBQXFCO3FCQUM3QztvQkFDRCx1QkFBdUIsRUFBRTt3QkFDdkIsUUFBUSxFQUFFLElBQUk7d0JBQ2QsbUJBQW1CLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO3dCQUN2QyxpQkFBaUIsRUFBRSxJQUFJO3dCQUN2QixPQUFPLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCxrQkFBa0IsRUFBRTt3QkFDbEIsUUFBUSxFQUFFLElBQUk7cUJBQ2Y7b0JBQ0QsY0FBYyxFQUFFO3dCQUNkLFFBQVEsRUFBRSxJQUFJO3dCQUNkLGNBQWMsRUFDWixzQ0FBcUIsQ0FBQywrQkFBK0I7cUJBQ3hEO29CQUNELGFBQWEsRUFBRTt3QkFDYixRQUFRLEVBQUUsSUFBSTt3QkFDZCxVQUFVLEVBQUUsSUFBSTt3QkFDaEIsU0FBUyxFQUFFLElBQUk7cUJBQ2hCO29CQUNELFlBQVksRUFBRTt3QkFDWixRQUFRLEVBQUUsSUFBSTt3QkFDZCxXQUFXLEVBQUUsbUNBQWtCLENBQUMsSUFBSTtxQkFDckM7aUJBQ0Y7YUFDRixDQUFDLENBQUM7UUFFTCwwQkFBMEI7UUFDMUIsTUFBTSxZQUFZLEdBQUcsSUFBSSw2QkFBWSxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUM5RCxXQUFXLEVBQUUsV0FBVztZQUN4QixXQUFXLEVBQUUsY0FBYztZQUMzQixPQUFPLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDekIsc0JBQXNCLEVBQUUsdUNBQXNCLENBQUMsV0FBVztZQUMxRCxlQUFlLEVBQUU7Z0JBQ2YsTUFBTSxFQUFFLElBQUksaUNBQVEsQ0FBQyxVQUFVLEVBQUU7b0JBQy9CLG9CQUFvQixFQUFFLGFBQWE7aUJBQ3BDLENBQUM7Z0JBQ0YsV0FBVyxFQUFFLEtBQUssQ0FBQyx5QkFBeUI7b0JBQzFDLENBQUMsQ0FBQzt3QkFDRTs0QkFDRSxlQUFlLEVBQUUsS0FBSyxDQUFDLHlCQUF5QixDQUFDLGNBQWM7NEJBQy9ELFNBQVMsRUFBRSxvQ0FBbUIsQ0FBQyxjQUFjO3lCQUM5QztxQkFDRjtvQkFDSCxDQUFDLENBQUMsRUFBRTtnQkFDTixRQUFRLEVBQUUsSUFBSTtnQkFDZCxjQUFjLEVBQUUsK0JBQWMsQ0FBQyxzQkFBc0I7Z0JBQ3JELG9CQUFvQixFQUFFLHFDQUFvQixDQUFDLGlCQUFpQjtnQkFDNUQscUJBQXFCLEVBQUUsb0JBQW9CO2FBQzVDO1lBRUQ7O2VBRUc7WUFDSCxjQUFjLEVBQUU7Z0JBQ2Q7b0JBQ0UsVUFBVSxFQUFFLEdBQUc7b0JBQ2Ysa0JBQWtCLEVBQUUsR0FBRztvQkFDdkIsZ0JBQWdCLEVBQUUsYUFBYTtpQkFDaEM7YUFDRjtZQUNELGlCQUFpQixFQUFFLFlBQVk7U0FDaEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNwQyxLQUFLLEVBQUUsWUFBWSxDQUFDLGNBQWM7U0FDbkMsQ0FBQyxDQUFDO1FBRUgsd0RBQXdEO1FBQ3hELEtBQUssTUFBTSxDQUFDLElBQUksY0FBYyxFQUFFO1lBQzlCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUN2RCxJQUFJLHFCQUFPLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDNUIsVUFBVSxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxFQUFFLDBCQUFZLENBQUMsU0FBUyxDQUFDLElBQUksc0NBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2xFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ2YsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxvQ0FBb0M7UUFDcEMsSUFBSSxvQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7WUFDbkQsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUM1QixpQkFBaUIsRUFBRSxVQUFVO1lBQzdCLFlBQVk7WUFDWixpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQztTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUE5SUQsc0RBOElDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxHQUFXO0lBQ3hDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsYUFBYSxDQUFDLE1BQWMsRUFBRSxZQUFvQjtJQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN6QixPQUFPLFlBQVksQ0FBQztLQUNyQjtJQUNELE9BQU8scUJBQXFCLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgRHVyYXRpb24sIFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IERuc1ZhbGlkYXRlZENlcnRpZmljYXRlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIEFsbG93ZWRNZXRob2RzLFxuICBEaXN0cmlidXRpb24sXG4gIGV4cGVyaW1lbnRhbCxcbiAgSGVhZGVyc0ZyYW1lT3B0aW9uLFxuICBIZWFkZXJzUmVmZXJyZXJQb2xpY3ksXG4gIExhbWJkYUVkZ2VFdmVudFR5cGUsXG4gIE9yaWdpbkFjY2Vzc0lkZW50aXR5LFxuICBSZXNwb25zZUhlYWRlcnNQb2xpY3ksXG4gIFNlY3VyaXR5UG9saWN5UHJvdG9jb2wsXG4gIFZpZXdlclByb3RvY29sUG9saWN5LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IFMzT3JpZ2luIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnNcIjtcbmltcG9ydCB7IENhbm9uaWNhbFVzZXJQcmluY2lwYWwsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBBUmVjb3JkLFxuICBIb3N0ZWRab25lLFxuICBJSG9zdGVkWm9uZSxcbiAgUmVjb3JkVGFyZ2V0LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuaW1wb3J0IHsgQmxvY2tQdWJsaWNBY2Nlc3MsIEJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IEJ1Y2tldERlcGxveW1lbnQsIElTb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnRcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0V2Vic2l0ZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBkb21haW4gbmFtZSBvZiB0aGUgd2Vic2l0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJ1aWx0IHJlYWN0IHNvdXJjZSBjb2RlIHRvIGRlcGxveS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUFzc2V0OiBJU291cmNlO1xuXG4gIC8qKlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gYSBzdHJpY3QgYW5kIHNlY3VyZSBDU1AgdGhhdCB3aWxsIHNjb3JlXG4gICAqIHdlbGwgb24gaHR0cHM6Ly9vYnNlcnZhdG9yeS5tb3ppbGxhLm9yZy8uXG4gICAqL1xuICByZWFkb25seSByZXNwb25zZUhlYWRlclBvbGljeT86IFJlc3BvbnNlSGVhZGVyc1BvbGljeTtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgZWRnZSBmdW5jdGlvbiB0byB0cmFuc2Zvcm0gUzMgcmVzcG9uc2VzLiBUaGlzIGlzIHVzZWZ1bFxuICAgKiBmb3IgZG9pbmcgdGhpbmdzIGxpa2UgaW5qZWN0aW5nIG1ldGF0YWdzIGZvciBzZWFyY2ggb3B0aW1pemF0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGVkZ2VPcmlnaW5SZXF1ZXN0RnVuY3Rpb24/OiBleHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBQb2xpY3kgZm9yIGRlbGV0aW5nIHJlc291cmNlcy4gRGVmYXVsdHMgdG8gZGVzdHJveS5cbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xufVxuXG4vKipcbiAqIEEgY29uc3RydWN0IHRvIGNyZWF0ZSBhIHNlY3VyZSBzaW5nbGUgcGFnZSBhcHBsaWNhdGlvbiByZWFjdCB3ZWJzaXRlLlxuICovXG5leHBvcnQgY2xhc3MgUmVhY3RXZWJzaXRlQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJlYWN0V2Vic2l0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBjb25zdCBkb21haW4gPSBwcm9wcy5kb21haW5OYW1lO1xuICAgIGNvbnN0IGFsbERvbWFpbk5hbWVzID0gW2RvbWFpbl07XG5cbiAgICBjb25zdCB6b25lczogeyBbbmFtZTogc3RyaW5nXTogSUhvc3RlZFpvbmUgfSA9IHt9O1xuICAgIGZvciAoY29uc3QgZCBvZiBhbGxEb21haW5OYW1lcykge1xuICAgICAgY29uc3QgcmVzb3VyY2VJZCA9IGdldFJlc291cmNlSWQoZCwgXCJab25lXCIpO1xuICAgICAgem9uZXNbZF0gPSBIb3N0ZWRab25lLmZyb21Mb29rdXAodGhpcywgcmVzb3VyY2VJZCwge1xuICAgICAgICBkb21haW5OYW1lOiBkb21haW4sXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgY2xvdWRmcm9udE9BSSA9IG5ldyBPcmlnaW5BY2Nlc3NJZGVudGl0eSh0aGlzLCBcImNsb3VkZnJvbnQtT0FJXCIsIHtcbiAgICAgIGNvbW1lbnQ6IGBPQUkgZm9yICR7ZG9tYWlufWAsXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiU2l0ZVwiLCB7IHZhbHVlOiBcImh0dHBzOi8vXCIgKyBkb21haW4gfSk7XG5cbiAgICAvLyBDb250ZW50IGJ1Y2tldFxuICAgIGNvbnN0IHNpdGVCdWNrZXQgPSBuZXcgQnVja2V0KHRoaXMsIFwiU2l0ZUJ1Y2tldFwiLCB7XG4gICAgICBwdWJsaWNSZWFkQWNjZXNzOiBmYWxzZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5LFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHByb3BzLnJlbW92YWxQb2xpY3kgPT09IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcbiAgICAvLyBHcmFudCBhY2Nlc3MgdG8gY2xvdWRmcm9udFxuICAgIHNpdGVCdWNrZXQuYWRkVG9SZXNvdXJjZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJzMzpHZXRPYmplY3RcIl0sXG4gICAgICAgIHJlc291cmNlczogW3NpdGVCdWNrZXQuYXJuRm9yT2JqZWN0cyhcIipcIildLFxuICAgICAgICBwcmluY2lwYWxzOiBbXG4gICAgICAgICAgbmV3IENhbm9uaWNhbFVzZXJQcmluY2lwYWwoXG4gICAgICAgICAgICBjbG91ZGZyb250T0FJLmNsb3VkRnJvbnRPcmlnaW5BY2Nlc3NJZGVudGl0eVMzQ2Fub25pY2FsVXNlcklkXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiQnVja2V0XCIsIHsgdmFsdWU6IHNpdGVCdWNrZXQuYnVja2V0TmFtZSB9KTtcblxuICAgIC8vIFRMUyBjZXJ0aWZpY2F0ZVxuICAgIGNvbnN0IGNlcnRpZmljYXRlID0gbmV3IERuc1ZhbGlkYXRlZENlcnRpZmljYXRlKHRoaXMsIFwiU2l0ZUNlcnRpZmljYXRlXCIsIHtcbiAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbixcbiAgICAgIHN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzOiBhbGxEb21haW5OYW1lcyxcbiAgICAgIGhvc3RlZFpvbmU6IHpvbmVzW2RvbWFpbl0sXG4gICAgICByZWdpb246IFwidXMtZWFzdC0xXCIsIC8vIENsb3VkZnJvbnQgb25seSBjaGVja3MgdGhpcyByZWdpb24gZm9yIGNlcnRpZmljYXRlcy5cbiAgICB9KTtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiQ2VydGlmaWNhdGVcIiwgeyB2YWx1ZTogY2VydGlmaWNhdGUuY2VydGlmaWNhdGVBcm4gfSk7XG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJQb2xpY3kgPVxuICAgICAgcHJvcHMucmVzcG9uc2VIZWFkZXJQb2xpY3kgfHxcbiAgICAgIG5ldyBSZXNwb25zZUhlYWRlcnNQb2xpY3kodGhpcywgXCJTZWN1cml0eUhlYWRlcnNSZXNwb25zZVBvbGljeVwiLCB7XG4gICAgICAgIGNvbW1lbnQ6IFwiU2VjdXJpdHkgaGVhZGVycyByZXNwb25zZSBwb2xpY3lcIixcbiAgICAgICAgc2VjdXJpdHlIZWFkZXJzQmVoYXZpb3I6IHtcbiAgICAgICAgICBjb250ZW50U2VjdXJpdHlQb2xpY3k6IHtcbiAgICAgICAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAgICAgY29udGVudFNlY3VyaXR5UG9saWN5OiBgZGVmYXVsdC1zcmMgJ3NlbGYnO2AsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdHJpY3RUcmFuc3BvcnRTZWN1cml0eToge1xuICAgICAgICAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgICBhY2Nlc3NDb250cm9sTWF4QWdlOiBEdXJhdGlvbi5kYXlzKDM2NSksXG4gICAgICAgICAgICBpbmNsdWRlU3ViZG9tYWluczogdHJ1ZSxcbiAgICAgICAgICAgIHByZWxvYWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb250ZW50VHlwZU9wdGlvbnM6IHtcbiAgICAgICAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVmZXJyZXJQb2xpY3k6IHtcbiAgICAgICAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAgICAgcmVmZXJyZXJQb2xpY3k6XG4gICAgICAgICAgICAgIEhlYWRlcnNSZWZlcnJlclBvbGljeS5TVFJJQ1RfT1JJR0lOX1dIRU5fQ1JPU1NfT1JJR0lOLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeHNzUHJvdGVjdGlvbjoge1xuICAgICAgICAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgICBwcm90ZWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgbW9kZUJsb2NrOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZnJhbWVPcHRpb25zOiB7XG4gICAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICAgIGZyYW1lT3B0aW9uOiBIZWFkZXJzRnJhbWVPcHRpb24uREVOWSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAvLyBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbiA9IG5ldyBEaXN0cmlidXRpb24odGhpcywgXCJTaXRlRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIGNlcnRpZmljYXRlOiBjZXJ0aWZpY2F0ZSxcbiAgICAgIGRvbWFpbk5hbWVzOiBhbGxEb21haW5OYW1lcyxcbiAgICAgIGNvbW1lbnQ6IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uOiBTZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yMDE2LFxuICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgIG9yaWdpbjogbmV3IFMzT3JpZ2luKHNpdGVCdWNrZXQsIHtcbiAgICAgICAgICBvcmlnaW5BY2Nlc3NJZGVudGl0eTogY2xvdWRmcm9udE9BSSxcbiAgICAgICAgfSksXG4gICAgICAgIGVkZ2VMYW1iZGFzOiBwcm9wcy5lZGdlT3JpZ2luUmVxdWVzdEZ1bmN0aW9uXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvblZlcnNpb246IHByb3BzLmVkZ2VPcmlnaW5SZXF1ZXN0RnVuY3Rpb24uY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBMYW1iZGFFZGdlRXZlbnRUeXBlLk9SSUdJTl9SRVFVRVNULFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW10sXG4gICAgICAgIGNvbXByZXNzOiB0cnVlLFxuICAgICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IFZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3k6IHJlc3BvbnNlSGVhZGVyUG9saWN5LFxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgcm91dGVzIGVuZCB1cCB1c2luZyBpbmRleC5odG1sIGZvciBjbGllbnQgc2lkZSByZW5kZXJpbmcuXG4gICAgICAgKi9cbiAgICAgIGVycm9yUmVzcG9uc2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA0MDMsXG4gICAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogXCIvaW5kZXguaHRtbFwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGRlZmF1bHRSb290T2JqZWN0OiBcImluZGV4Lmh0bWxcIixcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJEaXN0cmlidXRpb25JZFwiLCB7XG4gICAgICB2YWx1ZTogZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbklkLFxuICAgIH0pO1xuXG4gICAgLy8gUm91dGU1MyBhbGlhcyByZWNvcmQgZm9yIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbl1cbiAgICBmb3IgKGNvbnN0IGQgb2YgYWxsRG9tYWluTmFtZXMpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlSWQgPSBnZXRSZXNvdXJjZUlkKGQsIFwiU2l0ZUFsaWFzUmVjb3JkXCIpO1xuICAgICAgbmV3IEFSZWNvcmQodGhpcywgcmVzb3VyY2VJZCwge1xuICAgICAgICByZWNvcmROYW1lOiBkLFxuICAgICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMobmV3IENsb3VkRnJvbnRUYXJnZXQoZGlzdHJpYnV0aW9uKSksXG4gICAgICAgIHpvbmU6IHpvbmVzW2RdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRGVwbG95IHNpdGUgY29udGVudHMgdG8gUzMgYnVja2V0XG4gICAgbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcywgXCJEZXBsb3lXaXRoSW52YWxpZGF0aW9uXCIsIHtcbiAgICAgIHNvdXJjZXM6IFtwcm9wcy5zb3VyY2VBc3NldF0sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogc2l0ZUJ1Y2tldCxcbiAgICAgIGRpc3RyaWJ1dGlvbixcbiAgICAgIGRpc3RyaWJ1dGlvblBhdGhzOiBbXCIvKlwiXSxcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoc3RyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn1cblxuLyoqXG4gKiBBIHNpbXBsZSBmdW5jdGlvbiB0byBtYWtlIHRoZSByZXNvdXJjZSBpZCBodW1hbiByZWFkYWJsZS5cbiAqL1xuZnVuY3Rpb24gZ2V0UmVzb3VyY2VJZChkb21haW46IHN0cmluZywgcmVzb3VyY2VUeXBlOiBzdHJpbmcpIHtcbiAgaWYgKCFkb21haW4uaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgcmV0dXJuIHJlc291cmNlVHlwZTtcbiAgfVxuICByZXR1cm4gY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGAke2RvbWFpbi5zcGxpdChcIi5cIilbMF19JHtyZXNvdXJjZVR5cGV9YCk7XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWlFO0FBQ2pFLCtFQUE2RTtBQUM3RSwrREFXb0M7QUFDcEMsK0VBQThEO0FBQzlELGlEQUE4RTtBQUM5RSx5REFLaUM7QUFDakMseUVBQW1FO0FBQ25FLCtDQUErRDtBQUMvRCxxRUFBMEU7QUFDMUUsMkNBQXVDO0FBOEJ2Qzs7R0FFRztBQUNILE1BQWEscUJBQXNCLFNBQVEsc0JBQVM7SUFDbEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNoRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLDRCQUE0QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0Y7QUFMRCxzREFLQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsNEJBQTRCLENBQzFDLElBQWUsRUFDZixLQUF3QjtJQUV4QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ2hDLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFaEMsTUFBTSxLQUFLLEdBQW9DLEVBQUUsQ0FBQztJQUNsRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLGNBQWMsRUFBRTtRQUM5QixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyx3QkFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ2pELFVBQVUsRUFBRSxNQUFNO1NBQ25CLENBQUMsQ0FBQztLQUNKO0lBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxxQ0FBb0IsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7UUFDckUsT0FBTyxFQUFFLFdBQVcsTUFBTSxFQUFFO0tBQzdCLENBQUMsQ0FB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QUFJLG9DQUFnQixDQUFDLElBQUksRUFBRSx3QkFBd0IsRUFBRTtRQUNuRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQzVCLGlCQUFpQixFQUFFLFVBQVU7UUFDN0IsWUFBWTtRQUNaLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDO0tBQzFCLENBQUMsQ0FBQztBQUNMLENBQUM7QUE5SUQsb0VBOElDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxHQUFXO0lBQ3hDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsYUFBYSxDQUFDLE1BQWMsRUFBRSxZQUFvQjtJQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN6QixPQUFPLFlBQVksQ0FBQztLQUNyQjtJQUNELE9BQU8scUJBQXFCLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgRHVyYXRpb24sIFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IERuc1ZhbGlkYXRlZENlcnRpZmljYXRlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIEFsbG93ZWRNZXRob2RzLFxuICBEaXN0cmlidXRpb24sXG4gIGV4cGVyaW1lbnRhbCxcbiAgSGVhZGVyc0ZyYW1lT3B0aW9uLFxuICBIZWFkZXJzUmVmZXJyZXJQb2xpY3ksXG4gIExhbWJkYUVkZ2VFdmVudFR5cGUsXG4gIE9yaWdpbkFjY2Vzc0lkZW50aXR5LFxuICBSZXNwb25zZUhlYWRlcnNQb2xpY3ksXG4gIFNlY3VyaXR5UG9saWN5UHJvdG9jb2wsXG4gIFZpZXdlclByb3RvY29sUG9saWN5LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IFMzT3JpZ2luIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnNcIjtcbmltcG9ydCB7IENhbm9uaWNhbFVzZXJQcmluY2lwYWwsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBBUmVjb3JkLFxuICBIb3N0ZWRab25lLFxuICBJSG9zdGVkWm9uZSxcbiAgUmVjb3JkVGFyZ2V0LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuaW1wb3J0IHsgQmxvY2tQdWJsaWNBY2Nlc3MsIEJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IEJ1Y2tldERlcGxveW1lbnQsIElTb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnRcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0V2Vic2l0ZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBkb21haW4gbmFtZSBvZiB0aGUgd2Vic2l0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJ1aWx0IHJlYWN0IHNvdXJjZSBjb2RlIHRvIGRlcGxveS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUFzc2V0OiBJU291cmNlO1xuXG4gIC8qKlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gYSBzdHJpY3QgYW5kIHNlY3VyZSBDU1AgdGhhdCB3aWxsIHNjb3JlXG4gICAqIHdlbGwgb24gaHR0cHM6Ly9vYnNlcnZhdG9yeS5tb3ppbGxhLm9yZy8uXG4gICAqL1xuICByZWFkb25seSByZXNwb25zZUhlYWRlclBvbGljeT86IFJlc3BvbnNlSGVhZGVyc1BvbGljeTtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgZWRnZSBmdW5jdGlvbiB0byB0cmFuc2Zvcm0gUzMgcmVzcG9uc2VzLiBUaGlzIGlzIHVzZWZ1bFxuICAgKiBmb3IgZG9pbmcgdGhpbmdzIGxpa2UgaW5qZWN0aW5nIG1ldGF0YWdzIGZvciBzZWFyY2ggb3B0aW1pemF0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGVkZ2VPcmlnaW5SZXF1ZXN0RnVuY3Rpb24/OiBleHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBQb2xpY3kgZm9yIGRlbGV0aW5nIHJlc291cmNlcy4gRGVmYXVsdHMgdG8gZGVzdHJveS5cbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xufVxuXG4vKipcbiAqIEEgY29uc3RydWN0IHRvIGNyZWF0ZSBhIHNlY3VyZSBzaW5nbGUgcGFnZSBhcHBsaWNhdGlvbiByZWFjdCB3ZWJzaXRlLlxuICovXG5leHBvcnQgY2xhc3MgUmVhY3RXZWJzaXRlQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJlYWN0V2Vic2l0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBjb25zdHJ1Y3RDb25zdHJ1Y3RzRnJvbVByb3BzKHRoaXMsIHByb3BzKTtcbiAgfVxufVxuXG4vKipcbiAqIEBEZXByZWNhdGVkXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBub3QgbWVhbnQgdG8gYmUgdXNlZCBieSBvdGhlcnMuIEZvciBQaW5lZ3JhcGgsIHJlb3JnYW5pemluZ1xuICogcmVzb3VyY2VzIGludG8gY29uc3RydWN0cyBjYXVzZXMgdGhlIGxvZ2ljYWwgaWRzIHRvIGNoYW5nZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay1yZmNzL2lzc3Vlcy8xNjJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdENvbnN0cnVjdHNGcm9tUHJvcHMoXG4gIHNlbGY6IENvbnN0cnVjdCxcbiAgcHJvcHM6IFJlYWN0V2Vic2l0ZVByb3BzXG4pIHtcbiAgY29uc3QgZG9tYWluID0gcHJvcHMuZG9tYWluTmFtZTtcbiAgY29uc3QgYWxsRG9tYWluTmFtZXMgPSBbZG9tYWluXTtcblxuICBjb25zdCB6b25lczogeyBbbmFtZTogc3RyaW5nXTogSUhvc3RlZFpvbmUgfSA9IHt9O1xuICBmb3IgKGNvbnN0IGQgb2YgYWxsRG9tYWluTmFtZXMpIHtcbiAgICBjb25zdCByZXNvdXJjZUlkID0gZ2V0UmVzb3VyY2VJZChkLCBcIlpvbmVcIik7XG4gICAgem9uZXNbZF0gPSBIb3N0ZWRab25lLmZyb21Mb29rdXAoc2VsZiwgcmVzb3VyY2VJZCwge1xuICAgICAgZG9tYWluTmFtZTogZG9tYWluLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IGNsb3VkZnJvbnRPQUkgPSBuZXcgT3JpZ2luQWNjZXNzSWRlbnRpdHkoc2VsZiwgXCJjbG91ZGZyb250LU9BSVwiLCB7XG4gICAgY29tbWVudDogYE9BSSBmb3IgJHtkb21haW59YCxcbiAgfSk7XG5cbiAgbmV3IENmbk91dHB1dChzZWxmLCBcIlNpdGVcIiwgeyB2YWx1ZTogXCJodHRwczovL1wiICsgZG9tYWluIH0pO1xuXG4gIC8vIENvbnRlbnQgYnVja2V0XG4gIGNvbnN0IHNpdGVCdWNrZXQgPSBuZXcgQnVja2V0KHNlbGYsIFwiU2l0ZUJ1Y2tldFwiLCB7XG4gICAgYnVja2V0TmFtZTogZG9tYWluLFxuICAgIHB1YmxpY1JlYWRBY2Nlc3M6IGZhbHNlLFxuICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSxcbiAgICBhdXRvRGVsZXRlT2JqZWN0czogcHJvcHMucmVtb3ZhbFBvbGljeSA9PT0gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICB9KTtcbiAgLy8gR3JhbnQgYWNjZXNzIHRvIGNsb3VkZnJvbnRcbiAgc2l0ZUJ1Y2tldC5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgYWN0aW9uczogW1wiczM6R2V0T2JqZWN0XCJdLFxuICAgICAgcmVzb3VyY2VzOiBbc2l0ZUJ1Y2tldC5hcm5Gb3JPYmplY3RzKFwiKlwiKV0sXG4gICAgICBwcmluY2lwYWxzOiBbXG4gICAgICAgIG5ldyBDYW5vbmljYWxVc2VyUHJpbmNpcGFsKFxuICAgICAgICAgIGNsb3VkZnJvbnRPQUkuY2xvdWRGcm9udE9yaWdpbkFjY2Vzc0lkZW50aXR5UzNDYW5vbmljYWxVc2VySWRcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgfSlcbiAgKTtcbiAgbmV3IENmbk91dHB1dChzZWxmLCBcIkJ1Y2tldFwiLCB7IHZhbHVlOiBzaXRlQnVja2V0LmJ1Y2tldE5hbWUgfSk7XG5cbiAgLy8gVExTIGNlcnRpZmljYXRlXG4gIGNvbnN0IGNlcnRpZmljYXRlID0gbmV3IERuc1ZhbGlkYXRlZENlcnRpZmljYXRlKHNlbGYsIFwiU2l0ZUNlcnRpZmljYXRlXCIsIHtcbiAgICBkb21haW5OYW1lOiBkb21haW4sXG4gICAgc3ViamVjdEFsdGVybmF0aXZlTmFtZXM6IGFsbERvbWFpbk5hbWVzLFxuICAgIGhvc3RlZFpvbmU6IHpvbmVzW2RvbWFpbl0sXG4gICAgcmVnaW9uOiBcInVzLWVhc3QtMVwiLCAvLyBDbG91ZGZyb250IG9ubHkgY2hlY2tzIHRoaXMgcmVnaW9uIGZvciBjZXJ0aWZpY2F0ZXMuXG4gIH0pO1xuICBuZXcgQ2ZuT3V0cHV0KHNlbGYsIFwiQ2VydGlmaWNhdGVcIiwgeyB2YWx1ZTogY2VydGlmaWNhdGUuY2VydGlmaWNhdGVBcm4gfSk7XG4gIGNvbnN0IHJlc3BvbnNlSGVhZGVyUG9saWN5ID1cbiAgICBwcm9wcy5yZXNwb25zZUhlYWRlclBvbGljeSB8fFxuICAgIG5ldyBSZXNwb25zZUhlYWRlcnNQb2xpY3koc2VsZiwgXCJTZWN1cml0eUhlYWRlcnNSZXNwb25zZVBvbGljeVwiLCB7XG4gICAgICBjb21tZW50OiBcIlNlY3VyaXR5IGhlYWRlcnMgcmVzcG9uc2UgcG9saWN5XCIsXG4gICAgICBzZWN1cml0eUhlYWRlcnNCZWhhdmlvcjoge1xuICAgICAgICBjb250ZW50U2VjdXJpdHlQb2xpY3k6IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICBjb250ZW50U2VjdXJpdHlQb2xpY3k6IGBkZWZhdWx0LXNyYyAnc2VsZic7YCxcbiAgICAgICAgfSxcbiAgICAgICAgc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHk6IHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgICBhY2Nlc3NDb250cm9sTWF4QWdlOiBEdXJhdGlvbi5kYXlzKDM2NSksXG4gICAgICAgICAgaW5jbHVkZVN1YmRvbWFpbnM6IHRydWUsXG4gICAgICAgICAgcHJlbG9hZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udGVudFR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHJlZmVycmVyUG9saWN5OiB7XG4gICAgICAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgcmVmZXJyZXJQb2xpY3k6IEhlYWRlcnNSZWZlcnJlclBvbGljeS5TVFJJQ1RfT1JJR0lOX1dIRU5fQ1JPU1NfT1JJR0lOLFxuICAgICAgICB9LFxuICAgICAgICB4c3NQcm90ZWN0aW9uOiB7XG4gICAgICAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgICAgICAgcHJvdGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgICBtb2RlQmxvY2s6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGZyYW1lT3B0aW9uczoge1xuICAgICAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgICAgICAgIGZyYW1lT3B0aW9uOiBIZWFkZXJzRnJhbWVPcHRpb24uREVOWSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgLy8gQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAgY29uc3QgZGlzdHJpYnV0aW9uID0gbmV3IERpc3RyaWJ1dGlvbihzZWxmLCBcIlNpdGVEaXN0cmlidXRpb25cIiwge1xuICAgIGNlcnRpZmljYXRlOiBjZXJ0aWZpY2F0ZSxcbiAgICBkb21haW5OYW1lczogYWxsRG9tYWluTmFtZXMsXG4gICAgY29tbWVudDogcHJvcHMuZG9tYWluTmFtZSxcbiAgICBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uOiBTZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yMDE2LFxuICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgb3JpZ2luOiBuZXcgUzNPcmlnaW4oc2l0ZUJ1Y2tldCwge1xuICAgICAgICBvcmlnaW5BY2Nlc3NJZGVudGl0eTogY2xvdWRmcm9udE9BSSxcbiAgICAgIH0pLFxuICAgICAgZWRnZUxhbWJkYXM6IHByb3BzLmVkZ2VPcmlnaW5SZXF1ZXN0RnVuY3Rpb25cbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogcHJvcHMuZWRnZU9yaWdpblJlcXVlc3RGdW5jdGlvbi5jdXJyZW50VmVyc2lvbixcbiAgICAgICAgICAgICAgZXZlbnRUeXBlOiBMYW1iZGFFZGdlRXZlbnRUeXBlLk9SSUdJTl9SRVFVRVNULFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10sXG4gICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IFZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5OiByZXNwb25zZUhlYWRlclBvbGljeSxcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGhpcyBlbnN1cmVzIHRoYXQgYWxsIHJvdXRlcyBlbmQgdXAgdXNpbmcgaW5kZXguaHRtbCBmb3IgY2xpZW50IHNpZGUgcmVuZGVyaW5nLlxuICAgICAqL1xuICAgIGVycm9yUmVzcG9uc2VzOiBbXG4gICAgICB7XG4gICAgICAgIGh0dHBTdGF0dXM6IDQwMyxcbiAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IFwiL2luZGV4Lmh0bWxcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBkZWZhdWx0Um9vdE9iamVjdDogXCJpbmRleC5odG1sXCIsXG4gIH0pO1xuXG4gIG5ldyBDZm5PdXRwdXQoc2VsZiwgXCJEaXN0cmlidXRpb25JZFwiLCB7XG4gICAgdmFsdWU6IGRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25JZCxcbiAgfSk7XG5cbiAgLy8gUm91dGU1MyBhbGlhcyByZWNvcmQgZm9yIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbl1cbiAgZm9yIChjb25zdCBkIG9mIGFsbERvbWFpbk5hbWVzKSB7XG4gICAgY29uc3QgcmVzb3VyY2VJZCA9IGdldFJlc291cmNlSWQoZCwgXCJTaXRlQWxpYXNSZWNvcmRcIik7XG4gICAgbmV3IEFSZWNvcmQoc2VsZiwgcmVzb3VyY2VJZCwge1xuICAgICAgcmVjb3JkTmFtZTogZCxcbiAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhuZXcgQ2xvdWRGcm9udFRhcmdldChkaXN0cmlidXRpb24pKSxcbiAgICAgIHpvbmU6IHpvbmVzW2RdLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gRGVwbG95IHNpdGUgY29udGVudHMgdG8gUzMgYnVja2V0XG4gIG5ldyBCdWNrZXREZXBsb3ltZW50KHNlbGYsIFwiRGVwbG95V2l0aEludmFsaWRhdGlvblwiLCB7XG4gICAgc291cmNlczogW3Byb3BzLnNvdXJjZUFzc2V0XSxcbiAgICBkZXN0aW5hdGlvbkJ1Y2tldDogc2l0ZUJ1Y2tldCxcbiAgICBkaXN0cmlidXRpb24sXG4gICAgZGlzdHJpYnV0aW9uUGF0aHM6IFtcIi8qXCJdLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59XG5cbi8qKlxuICogQSBzaW1wbGUgZnVuY3Rpb24gdG8gbWFrZSB0aGUgcmVzb3VyY2UgaWQgaHVtYW4gcmVhZGFibGUuXG4gKi9cbmZ1bmN0aW9uIGdldFJlc291cmNlSWQoZG9tYWluOiBzdHJpbmcsIHJlc291cmNlVHlwZTogc3RyaW5nKSB7XG4gIGlmICghZG9tYWluLmluY2x1ZGVzKFwiLlwiKSkge1xuICAgIHJldHVybiByZXNvdXJjZVR5cGU7XG4gIH1cbiAgcmV0dXJuIGNhcGl0YWxpemVGaXJzdExldHRlcihgJHtkb21haW4uc3BsaXQoXCIuXCIpWzBdfSR7cmVzb3VyY2VUeXBlfWApO1xufVxuIl19 |
@@ -21,3 +21,3 @@ { | ||
"license": "Apache-2.0", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"jest": { | ||
@@ -24,0 +24,0 @@ "testMatch": [ |
40659
209