Socket
Socket
Sign inDemoInstall

@aws-cdk/aws-events

Package Overview
Dependencies
4
Maintainers
5
Versions
288
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.31.0 to 0.32.0

lib/input.d.ts

3

lib/index.d.ts

@@ -0,1 +1,2 @@

export * from './input';
export * from './rule';

@@ -5,3 +6,3 @@ export * from './rule-ref';

export * from './event-pattern';
export * from './input-options';
export * from './on-event-options';
export * from './events.generated';

@@ -6,5 +6,6 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./input"));
__export(require("./rule"));
// AWS::Events CloudFormation Resources:
__export(require("./events.generated"));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRCQUF1QjtBQU12Qix3Q0FBd0M7QUFDeEMsd0NBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ydWxlJztcbmV4cG9ydCAqIGZyb20gJy4vcnVsZS1yZWYnO1xuZXhwb3J0ICogZnJvbSAnLi90YXJnZXQnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudC1wYXR0ZXJuJztcbmV4cG9ydCAqIGZyb20gJy4vaW5wdXQtb3B0aW9ucyc7XG5cbi8vIEFXUzo6RXZlbnRzIENsb3VkRm9ybWF0aW9uIFJlc291cmNlczpcbmV4cG9ydCAqIGZyb20gJy4vZXZlbnRzLmdlbmVyYXRlZCc7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUF3QjtBQUN4Qiw0QkFBdUI7QUFNdkIsd0NBQXdDO0FBQ3hDLHdDQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW5wdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9ydWxlJztcbmV4cG9ydCAqIGZyb20gJy4vcnVsZS1yZWYnO1xuZXhwb3J0ICogZnJvbSAnLi90YXJnZXQnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudC1wYXR0ZXJuJztcbmV4cG9ydCAqIGZyb20gJy4vb24tZXZlbnQtb3B0aW9ucyc7XG5cbi8vIEFXUzo6RXZlbnRzIENsb3VkRm9ybWF0aW9uIFJlc291cmNlczpcbmV4cG9ydCAqIGZyb20gJy4vZXZlbnRzLmdlbmVyYXRlZCc7XG4iXX0=
import { IResource } from '@aws-cdk/cdk';
export interface EventRuleAttributes {
export interface IRule extends IResource {
/**
* The value of the event rule Amazon Resource Name (ARN), such as
* arn:aws:events:us-east-2:123456789012:rule/example.
*/
readonly eventRuleArn: string;
}
export interface IEventRule extends IResource {
/**
* The value of the event rule Amazon Resource Name (ARN), such as
* arn:aws:events:us-east-2:123456789012:rule/example.
*

@@ -17,6 +10,2 @@ * @attribute

readonly ruleArn: string;
/**
* Exports this rule resource from this stack and returns an import token.
*/
export(): EventRuleAttributes;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1yZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJydWxlLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlc291cmNlIH0gZnJvbSAnQGF3cy1jZGsvY2RrJztcblxuZXhwb3J0IGludGVyZmFjZSBFdmVudFJ1bGVBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgZXZlbnQgcnVsZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSwgc3VjaCBhc1xuICAgKiBhcm46YXdzOmV2ZW50czp1cy1lYXN0LTI6MTIzNDU2Nzg5MDEyOnJ1bGUvZXhhbXBsZS5cbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50UnVsZUFybjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudFJ1bGUgZXh0ZW5kcyBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBldmVudCBydWxlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pLCBzdWNoIGFzXG4gICAqIGFybjphd3M6ZXZlbnRzOnVzLWVhc3QtMjoxMjM0NTY3ODkwMTI6cnVsZS9leGFtcGxlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBydWxlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGhpcyBydWxlIHJlc291cmNlIGZyb20gdGhpcyBzdGFjayBhbmQgcmV0dXJucyBhbiBpbXBvcnQgdG9rZW4uXG4gICAqL1xuICBleHBvcnQoKTogRXZlbnRSdWxlQXR0cmlidXRlcztcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1yZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJydWxlLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlc291cmNlIH0gZnJvbSAnQGF3cy1jZGsvY2RrJztcblxuZXhwb3J0IGludGVyZmFjZSBJUnVsZSBleHRlbmRzIElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGV2ZW50IHJ1bGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTiksIHN1Y2ggYXNcbiAgICogYXJuOmF3czpldmVudHM6dXMtZWFzdC0yOjEyMzQ1Njc4OTAxMjpydWxlL2V4YW1wbGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJ1bGVBcm46IHN0cmluZztcbn1cbiJdfQ==
import { Construct, Resource } from '@aws-cdk/cdk';
import { EventPattern } from './event-pattern';
import { TargetInputTemplate } from './input-options';
import { EventRuleAttributes, IEventRule } from './rule-ref';
import { IEventRuleTarget } from './target';
export interface EventRuleProps {
import { IRule } from './rule-ref';
import { IRuleTarget } from './target';
export interface RuleProps {
/**
* A description of the rule's purpose.
*
* @default - No description.
*/
readonly description?: string;
/**
* A name for the rule. If you don't specify a name, AWS CloudFormation
* generates a unique physical ID and uses that ID for the rule name. For
* more information, see Name Type.
* A name for the rule.
*
* @default - AWS CloudFormation generates a unique physical ID and uses that ID
* for the rule name. For more information, see Name Type.
*/

@@ -19,3 +21,4 @@ readonly ruleName?: string;

* Indicates whether the rule is enabled.
* @default Rule is enabled
*
* @default true
*/

@@ -31,2 +34,4 @@ readonly enabled?: boolean;

* You must specify this property, the `eventPattern` property, or both.
*
* @default - None.
*/

@@ -46,2 +51,4 @@ readonly scheduleExpression?: string;

* pattern.
*
* @default - None.
*/

@@ -54,4 +61,6 @@ readonly eventPattern?: EventPattern;

* target input, use `addTarget(target[, inputOptions])`.
*
* @default - No targets.
*/
readonly targets?: IEventRuleTarget[];
readonly targets?: IRuleTarget[];
}

@@ -63,4 +72,4 @@ /**

*/
export declare class EventRule extends Resource implements IEventRule {
static fromEventRuleArn(scope: Construct, id: string, eventRuleArn: string): IEventRule;
export declare class Rule extends Resource implements IRule {
static fromEventRuleArn(scope: Construct, id: string, eventRuleArn: string): IRule;
readonly ruleArn: string;

@@ -70,8 +79,4 @@ private readonly targets;

private scheduleExpression?;
constructor(scope: Construct, id: string, props?: EventRuleProps);
constructor(scope: Construct, id: string, props?: RuleProps);
/**
* Exports this rule resource from this stack and returns an import token.
*/
export(): EventRuleAttributes;
/**
* Adds a target to the rule. The abstract class RuleTarget can be extended to define new

@@ -82,3 +87,3 @@ * targets.

*/
addTarget(target?: IEventRuleTarget, inputOptions?: TargetInputTemplate): void;
addTarget(target?: IRuleTarget): void;
/**

@@ -85,0 +90,0 @@ * Adds an event pattern filter to this rule. If a pattern was already specified,

@@ -11,3 +11,3 @@ "use strict";

*/
class EventRule extends cdk_1.Resource {
class Rule extends cdk_1.Resource {
constructor(scope, id, props = {}) {

@@ -23,3 +23,3 @@ super(scope, id);

eventPattern: new cdk_1.Token(() => this.renderEventPattern()),
targets: new cdk_1.Token(() => this.renderTargets())
targets: new cdk_1.Token(() => this.renderTargets()),
});

@@ -39,5 +39,2 @@ this.ruleArn = resource.ruleArn;

}
export() {
return { eventRuleArn };
}
}

@@ -47,10 +44,2 @@ return new Import(scope, id);

/**
* Exports this rule resource from this stack and returns an import token.
*/
export() {
return {
eventRuleArn: new cdk_1.CfnOutput(this, 'RuleArn', { value: this.ruleArn }).makeImportValue().toString()
};
}
/**
* Adds a target to the rule. The abstract class RuleTarget can be extended to define new

@@ -61,44 +50,28 @@ * targets.

*/
addTarget(target, inputOptions) {
addTarget(target) {
if (!target) {
return;
}
const self = this;
const targetProps = target.asEventRuleTarget(this.ruleArn, this.node.uniqueId);
const targetProps = target.bind(this);
const id = sanitizeId(targetProps.id);
const inputProps = targetProps.input && targetProps.input.bind(this);
// check if a target with this ID already exists
if (this.targets.find(t => t.id === targetProps.id)) {
throw new Error('Duplicate event rule target with ID: ' + targetProps.id);
if (this.targets.find(t => t.id === id)) {
throw new Error('Duplicate event rule target with ID: ' + id);
}
const roleArn = targetProps.role ? targetProps.role.roleArn : undefined;
this.targets.push({
...targetProps,
inputTransformer: renderTransformer(),
id,
arn: targetProps.arn,
roleArn,
ecsParameters: targetProps.ecsParameters,
kinesisParameters: targetProps.kinesisParameters,
runCommandParameters: targetProps.runCommandParameters,
input: inputProps && inputProps.input,
inputPath: inputProps && inputProps.inputPath,
inputTransformer: inputProps && inputProps.inputTemplate !== undefined ? {
inputTemplate: inputProps.inputTemplate,
inputPathsMap: inputProps.inputPathsMap,
} : undefined,
});
function renderTransformer() {
if (!inputOptions) {
return undefined;
}
if (inputOptions.jsonTemplate && inputOptions.textTemplate) {
throw new Error('"jsonTemplate" and "textTemplate" are mutually exclusive');
}
if (!inputOptions.jsonTemplate && !inputOptions.textTemplate) {
throw new Error('One of "jsonTemplate" or "textTemplate" are required');
}
let inputTemplate;
if (inputOptions.jsonTemplate) {
inputTemplate = typeof inputOptions.jsonTemplate === 'string'
? inputOptions.jsonTemplate
: self.node.stringifyJson(inputOptions.jsonTemplate);
}
else {
inputTemplate = typeof (inputOptions.textTemplate) === 'string'
// Newline separated list of JSON-encoded strings
? inputOptions.textTemplate.split('\n').map(x => self.node.stringifyJson(x)).join('\n')
// Some object, stringify it, then stringify the string for proper escaping
: self.node.stringifyJson(self.node.stringifyJson(inputOptions.textTemplate));
}
return {
inputPathsMap: inputOptions.pathsMap,
inputTemplate
};
}
}

@@ -173,3 +146,11 @@ /**

}
exports.EventRule = EventRule;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBcUU7QUFFckUseURBQTZDO0FBSTdDLGlDQUEyQztBQXdEM0M7Ozs7R0FJRztBQUNILE1BQWEsU0FBVSxTQUFRLGNBQVE7SUFrQnJDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBd0IsRUFBRztRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBTEYsWUFBTyxHQUFHLElBQUksS0FBSyxFQUEwQixDQUFDO1FBQzlDLGlCQUFZLEdBQWlCLEVBQUcsQ0FBQztRQU1oRCxNQUFNLFFBQVEsR0FBRyxJQUFJLDBCQUFPLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUM3QyxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDcEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ25GLGtCQUFrQixFQUFFLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUN2RSxZQUFZLEVBQUUsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDeEQsT0FBTyxFQUFFLElBQUksV0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMvQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFFaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFL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LENBQUM7UUFDcEIsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sS0FBSyxHQUFJLFlBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsSUFBSSxHQUFHLEtBQUssWUFBWSxFQUFFO2dCQUN4QixHQUFHLEdBQUcsYUFBYSxDQUFDO2FBQ3JCO1lBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUNsQjtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGO0FBcExELDhCQW9MQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgQ29uc3RydWN0LCBSZXNvdXJjZSwgVG9rZW4gfSBmcm9tICdAYXdzLWNkay9jZGsnO1xuaW1wb3J0IHsgRXZlbnRQYXR0ZXJuIH0gZnJvbSAnLi9ldmVudC1wYXR0ZXJuJztcbmltcG9ydCB7IENmblJ1bGUgfSBmcm9tICcuL2V2ZW50cy5nZW5lcmF0ZWQnO1xuaW1wb3J0IHsgVGFyZ2V0SW5wdXRUZW1wbGF0ZSB9IGZyb20gJy4vaW5wdXQtb3B0aW9ucyc7XG5pbXBvcnQgeyBFdmVudFJ1bGVBdHRyaWJ1dGVzLCBJRXZlbnRSdWxlIH0gZnJvbSAnLi9ydWxlLXJlZic7XG5pbXBvcnQgeyBJRXZlbnRSdWxlVGFyZ2V0IH0gZnJvbSAnLi90YXJnZXQnO1xuaW1wb3J0IHsgbWVyZ2VFdmVudFBhdHRlcm4gfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50UnVsZVByb3BzIHtcbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIHJ1bGUncyBwdXJwb3NlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgbmFtZSBmb3IgdGhlIHJ1bGUuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgbmFtZSwgQVdTIENsb3VkRm9ybWF0aW9uXG4gICAqIGdlbmVyYXRlcyBhIHVuaXF1ZSBwaHlzaWNhbCBJRCBhbmQgdXNlcyB0aGF0IElEIGZvciB0aGUgcnVsZSBuYW1lLiBGb3JcbiAgICogbW9yZSBpbmZvcm1hdGlvbiwgc2VlIE5hbWUgVHlwZS5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcnVsZSBpcyBlbmFibGVkLlxuICAgKiBAZGVmYXVsdCBSdWxlIGlzIGVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NoZWR1bGUgb3IgcmF0ZSAoZnJlcXVlbmN5KSB0aGF0IGRldGVybWluZXMgd2hlbiBDbG91ZFdhdGNoIEV2ZW50c1xuICAgKiBydW5zIHRoZSBydWxlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFNjaGVkdWxlIEV4cHJlc3Npb24gU3ludGF4IGZvclxuICAgKiBSdWxlcyBpbiB0aGUgQW1hem9uIENsb3VkV2F0Y2ggVXNlciBHdWlkZS5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9ldmVudHMvU2NoZWR1bGVkRXZlbnRzLmh0bWxcbiAgICpcbiAgICogWW91IG11c3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LCB0aGUgYGV2ZW50UGF0dGVybmAgcHJvcGVydHksIG9yIGJvdGguXG4gICAqL1xuICByZWFkb25seSBzY2hlZHVsZUV4cHJlc3Npb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlcyB3aGljaCBldmVudHMgQ2xvdWRXYXRjaCBFdmVudHMgcm91dGVzIHRvIHRoZSBzcGVjaWZpZWQgdGFyZ2V0LlxuICAgKiBUaGVzZSByb3V0ZWQgZXZlbnRzIGFyZSBtYXRjaGVkIGV2ZW50cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBFdmVudHNcbiAgICogYW5kIEV2ZW50IFBhdHRlcm5zIGluIHRoZSBBbWF6b24gQ2xvdWRXYXRjaCBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBAc2VlXG4gICAqIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0Nsb3VkV2F0Y2hFdmVudHNhbmRFdmVudFBhdHRlcm5zLmh0bWxcbiAgICpcbiAgICogWW91IG11c3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5IChlaXRoZXIgdmlhIHByb3BzIG9yIHZpYVxuICAgKiBgYWRkRXZlbnRQYXR0ZXJuYCksIHRoZSBgc2NoZWR1bGVFeHByZXNzaW9uYCBwcm9wZXJ0eSwgb3IgYm90aC4gVGhlXG4gICAqIG1ldGhvZCBgYWRkRXZlbnRQYXR0ZXJuYCBjYW4gYmUgdXNlZCB0byBhZGQgZmlsdGVyIHZhbHVlcyB0byB0aGUgZXZlbnRcbiAgICogcGF0dGVybi5cbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50UGF0dGVybj86IEV2ZW50UGF0dGVybjtcblxuICAvKipcbiAgICogVGFyZ2V0cyB0byBpbnZva2Ugd2hlbiB0aGlzIHJ1bGUgbWF0Y2hlcyBhbiBldmVudC5cbiAgICpcbiAgICogSW5wdXQgd2lsbCBiZSB0aGUgZnVsbCBtYXRjaGVkIGV2ZW50LiBJZiB5b3Ugd2lzaCB0byBzcGVjaWZ5IGN1c3RvbVxuICAgKiB0YXJnZXQgaW5wdXQsIHVzZSBgYWRkVGFyZ2V0KHRhcmdldFssIGlucHV0T3B0aW9uc10pYC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldHM/OiBJRXZlbnRSdWxlVGFyZ2V0W107XG59XG5cbi8qKlxuICogRGVmaW5lcyBhIENsb3VkV2F0Y2ggRXZlbnQgUnVsZSBpbiB0aGlzIHN0YWNrLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkV2ZW50czo6UnVsZVxuICovXG5leHBvcnQgY2xhc3MgRXZlbnRSdWxlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJRXZlbnRSdWxlIHtcblxuICBwdWJsaWMgc3RhdGljIGZyb21FdmVudFJ1bGVBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgZXZlbnRSdWxlQXJuOiBzdHJpbmcpOiBJRXZlbnRSdWxlIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElFdmVudFJ1bGUge1xuICAgICAgcHVibGljIHJ1bGVBcm4gPSBldmVudFJ1bGVBcm47XG4gICAgICBwdWJsaWMgZXhwb3J0KCk6IEV2ZW50UnVsZUF0dHJpYnV0ZXMge1xuICAgICAgICByZXR1cm4geyBldmVudFJ1bGVBcm4gfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBydWxlQXJuOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRzID0gbmV3IEFycmF5PENmblJ1bGUuVGFyZ2V0UHJvcGVydHk+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRQYXR0ZXJuOiBFdmVudFBhdHRlcm4gPSB7IH07XG4gIHByaXZhdGUgc2NoZWR1bGVFeHByZXNzaW9uPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFdmVudFJ1bGVQcm9wcyA9IHsgfSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBDZm5SdWxlKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHByb3BzLnJ1bGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgc3RhdGU6IHByb3BzLmVuYWJsZWQgPT0gbnVsbCA/ICdFTkFCTEVEJyA6IChwcm9wcy5lbmFibGVkID8gJ0VOQUJMRUQnIDogJ0RJU0FCTEVEJyksXG4gICAgICBzY2hlZHVsZUV4cHJlc3Npb246IG5ldyBUb2tlbigoKSA9PiB0aGlzLnNjaGVkdWxlRXhwcmVzc2lvbikudG9TdHJpbmcoKSxcbiAgICAgIGV2ZW50UGF0dGVybjogbmV3IFRva2VuKCgpID0+IHRoaXMucmVuZGVyRXZlbnRQYXR0ZXJuKCkpLFxuICAgICAgdGFyZ2V0czogbmV3IFRva2VuKCgpID0+IHRoaXMucmVuZGVyVGFyZ2V0cygpKVxuICAgIH0pO1xuXG4gICAgdGhpcy5ydWxlQXJuID0gcmVzb3VyY2UucnVsZUFybjtcblxuICAgIHRoaXMuYWRkRXZlbnRQYXR0ZXJuKHByb3BzLmV2ZW50UGF0dGVybik7XG4gICAgdGhpcy5zY2hlZHVsZUV4cHJlc3Npb24gPSBwcm9wcy5zY2hlZHVsZUV4cHJlc3Npb247XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiBwcm9wcy50YXJnZXRzIHx8IFtdKSB7XG4gICAgICB0aGlzLmFkZFRhcmdldCh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnRzIHRoaXMgcnVsZSByZXNvdXJjZSBmcm9tIHRoaXMgc3RhY2sgYW5kIHJldHVybnMgYW4gaW1wb3J0IHRva2VuLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydCgpOiBFdmVudFJ1bGVBdHRyaWJ1dGVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRSdWxlQXJuOiBuZXcgQ2ZuT3V0cHV0KHRoaXMsICdSdWxlQXJuJywgeyB2YWx1ZTogdGhpcy5ydWxlQXJuIH0pLm1ha2VJbXBvcnRWYWx1ZSgpLnRvU3RyaW5nKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB0YXJnZXQgdG8gdGhlIHJ1bGUuIFRoZSBhYnN0cmFjdCBjbGFzcyBSdWxlVGFyZ2V0IGNhbiBiZSBleHRlbmRlZCB0byBkZWZpbmUgbmV3XG4gICAqIHRhcmdldHMuXG4gICAqXG4gICAqIE5vLW9wIGlmIHRhcmdldCBpcyB1bmRlZmluZWQuXG4gICAqL1xuICBwdWJsaWMgYWRkVGFyZ2V0KHRhcmdldD86IElFdmVudFJ1bGVUYXJnZXQsIGlucHV0T3B0aW9ucz86IFRhcmdldElucHV0VGVtcGxhdGUpIHtcbiAgICBpZiAoIXRhcmdldCkgeyByZXR1cm47IH1cbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGNvbnN0IHRhcmdldFByb3BzID0gdGFyZ2V0LmFzRXZlbnRSdWxlVGFyZ2V0KHRoaXMucnVsZUFybiwgdGhpcy5ub2RlLnVuaXF1ZUlkKTtcblxuICAgIC8vIGNoZWNrIGlmIGEgdGFyZ2V0IHdpdGggdGhpcyBJRCBhbHJlYWR5IGV4aXN0c1xuICAgIGlmICh0aGlzLnRhcmdldHMuZmluZCh0ID0+IHQuaWQgPT09IHRhcmdldFByb3BzLmlkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEdXBsaWNhdGUgZXZlbnQgcnVsZSB0YXJnZXQgd2l0aCBJRDogJyArIHRhcmdldFByb3BzLmlkKTtcbiAgICB9XG5cbiAgICB0aGlzLnRhcmdldHMucHVzaCh7XG4gICAgICAuLi50YXJnZXRQcm9wcyxcbiAgICAgIGlucHV0VHJhbnNmb3JtZXI6IHJlbmRlclRyYW5zZm9ybWVyKCksXG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiByZW5kZXJUcmFuc2Zvcm1lcigpOiBDZm5SdWxlLklucHV0VHJhbnNmb3JtZXJQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAoIWlucHV0T3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXRPcHRpb25zLmpzb25UZW1wbGF0ZSAmJiBpbnB1dE9wdGlvbnMudGV4dFRlbXBsYXRlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCJqc29uVGVtcGxhdGVcIiBhbmQgXCJ0ZXh0VGVtcGxhdGVcIiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaW5wdXRPcHRpb25zLmpzb25UZW1wbGF0ZSAmJiAhaW5wdXRPcHRpb25zLnRleHRUZW1wbGF0ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09uZSBvZiBcImpzb25UZW1wbGF0ZVwiIG9yIFwidGV4dFRlbXBsYXRlXCIgYXJlIHJlcXVpcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBpbnB1dFRlbXBsYXRlOiBhbnk7XG5cbiAgICAgIGlmIChpbnB1dE9wdGlvbnMuanNvblRlbXBsYXRlKSB7XG4gICAgICAgIGlucHV0VGVtcGxhdGUgPSB0eXBlb2YgaW5wdXRPcHRpb25zLmpzb25UZW1wbGF0ZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gaW5wdXRPcHRpb25zLmpzb25UZW1wbGF0ZVxuICAgICAgICAgICAgOiBzZWxmLm5vZGUuc3RyaW5naWZ5SnNvbihpbnB1dE9wdGlvbnMuanNvblRlbXBsYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0VGVtcGxhdGUgPSB0eXBlb2YoaW5wdXRPcHRpb25zLnRleHRUZW1wbGF0ZSkgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAvLyBOZXdsaW5lIHNlcGFyYXRlZCBsaXN0IG9mIEpTT04tZW5jb2RlZCBzdHJpbmdzXG4gICAgICAgICAgICA/IGlucHV0T3B0aW9ucy50ZXh0VGVtcGxhdGUuc3BsaXQoJ1xcbicpLm1hcCh4ID0+IHNlbGYubm9kZS5zdHJpbmdpZnlKc29uKHgpKS5qb2luKCdcXG4nKVxuICAgICAgICAgICAgLy8gU29tZSBvYmplY3QsIHN0cmluZ2lmeSBpdCwgdGhlbiBzdHJpbmdpZnkgdGhlIHN0cmluZyBmb3IgcHJvcGVyIGVzY2FwaW5nXG4gICAgICAgICAgICA6IHNlbGYubm9kZS5zdHJpbmdpZnlKc29uKHNlbGYubm9kZS5zdHJpbmdpZnlKc29uKGlucHV0T3B0aW9ucy50ZXh0VGVtcGxhdGUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5wdXRQYXRoc01hcDogaW5wdXRPcHRpb25zLnBhdGhzTWFwLFxuICAgICAgICBpbnB1dFRlbXBsYXRlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV2ZW50IHBhdHRlcm4gZmlsdGVyIHRvIHRoaXMgcnVsZS4gSWYgYSBwYXR0ZXJuIHdhcyBhbHJlYWR5IHNwZWNpZmllZCxcbiAgICogdGhlc2UgdmFsdWVzIGFyZSBtZXJnZWQgaW50byB0aGUgZXhpc3RpbmcgcGF0dGVybi5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGlmIHRoZSBydWxlIGFscmVhZHkgY29udGFpbnMgdGhlIHBhdHRlcm46XG4gICAqXG4gICAqICAgIHtcbiAgICogICAgICBcInJlc291cmNlc1wiOiBbIFwicjFcIiBdLFxuICAgKiAgICAgIFwiZGV0YWlsXCI6IHtcbiAgICogICAgICAgIFwiaGVsbG9cIjogWyAxIF1cbiAgICogICAgICB9XG4gICAqICAgIH1cbiAgICpcbiAgICogQW5kIGBhZGRFdmVudFBhdHRlcm5gIGlzIGNhbGxlZCB3aXRoIHRoZSBwYXR0ZXJuOlxuICAgKlxuICAgKiAgICB7XG4gICAqICAgICAgXCJyZXNvdXJjZXNcIjogWyBcInIyXCIgXSxcbiAgICogICAgICBcImRldGFpbFwiOiB7XG4gICAqICAgICAgICBcImZvb1wiOiBbIFwiYmFyXCIgXVxuICAgKiAgICAgIH1cbiAgICogICAgfVxuICAgKlxuICAgKiBUaGUgcmVzdWx0aW5nIGV2ZW50IHBhdHRlcm4gd2lsbCBiZTpcbiAgICpcbiAgICogICAge1xuICAgKiAgICAgIFwicmVzb3VyY2VzXCI6IFsgXCJyMVwiLCBcInIyXCIgXSxcbiAgICogICAgICBcImRldGFpbFwiOiB7XG4gICAqICAgICAgICBcImhlbGxvXCI6IFsgMSBdLFxuICAgKiAgICAgICAgXCJmb29cIjogWyBcImJhclwiIF1cbiAgICogICAgICB9XG4gICAqICAgIH1cbiAgICpcbiAgICovXG4gIHB1YmxpYyBhZGRFdmVudFBhdHRlcm4oZXZlbnRQYXR0ZXJuPzogRXZlbnRQYXR0ZXJuKSB7XG4gICAgaWYgKCFldmVudFBhdHRlcm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbWVyZ2VFdmVudFBhdHRlcm4odGhpcy5ldmVudFBhdHRlcm4sIGV2ZW50UGF0dGVybik7XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGUoKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZXZlbnRQYXR0ZXJuKS5sZW5ndGggPT09IDAgJiYgIXRoaXMuc2NoZWR1bGVFeHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4gWyBgRWl0aGVyICdldmVudFBhdHRlcm4nIG9yICdzY2hlZHVsZUV4cHJlc3Npb24nIG11c3QgYmUgZGVmaW5lZGAgXTtcbiAgICB9XG5cbiAgICByZXR1cm4gWyBdO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJUYXJnZXRzKCkge1xuICAgIGlmICh0aGlzLnRhcmdldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRhcmdldHM7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckV2ZW50UGF0dGVybigpIHtcbiAgICBjb25zdCBldmVudFBhdHRlcm4gPSB0aGlzLmV2ZW50UGF0dGVybjtcblxuICAgIGlmIChPYmplY3Qua2V5cyhldmVudFBhdHRlcm4pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyByZW5hbWUgJ2RldGFpbFR5cGUnIHRvICdkZXRhaWwtdHlwZSdcbiAgICBjb25zdCBvdXQ6IGFueSA9IHt9O1xuICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhldmVudFBhdHRlcm4pKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChldmVudFBhdHRlcm4gYXMgYW55KVtrZXldO1xuICAgICAgaWYgKGtleSA9PT0gJ2RldGFpbFR5cGUnKSB7XG4gICAgICAgIGtleSA9ICdkZXRhaWwtdHlwZSc7XG4gICAgICB9XG4gICAgICBvdXRba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG4gIH1cbn1cbiJdfQ==
exports.Rule = Rule;
/**
* Sanitize whatever is returned to make a valid ID
*
* Result must match regex [\.\-_A-Za-z0-9]+
*/
function sanitizeId(id) {
return id.replace(/[^\.\-_A-Za-z0-9]/g, '-');
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBMEQ7QUFFMUQseURBQTZDO0FBRzdDLGlDQUEyQztBQWtFM0M7Ozs7R0FJRztBQUNILE1BQWEsSUFBSyxTQUFRLGNBQVE7SUFlaEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFtQixFQUFHO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFMRixZQUFPLEdBQUcsSUFBSSxLQUFLLEVBQTBCLENBQUM7UUFDOUMsaUJBQVksR0FBaUIsRUFBRyxDQUFDO1FBTWhELE1BQU0sUUFBUSxHQUFHLElBQUksMEJBQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzdDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUTtZQUNwQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFDbkYsa0JBQWtCLEVBQUUsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ3ZFLFlBQVksRUFBRSxJQUFJLFdBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN4RCxPQUFPLEVBQUUsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQy9DLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUVoQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUss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QztTQUNsQjtRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFFdkMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUMsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCx1Q0FBdUM7UUFDdkMsTUFBTSxHQUFHLEdBQVEsRUFBRSxDQUFDO1FBQ3BCLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN6QyxNQUFNLEtBQUssR0FBSSxZQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLElBQUksR0FBRyxLQUFLLFlBQVksRUFBRTtnQkFDeEIsR0FBRyxHQUFHLGFBQWEsQ0FBQzthQUNyQjtZQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDbEI7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRjtBQXBKRCxvQkFvSkM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxVQUFVLENBQUMsRUFBVTtJQUM1QixPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCwgUmVzb3VyY2UsIFRva2VuIH0gZnJvbSAnQGF3cy1jZGsvY2RrJztcbmltcG9ydCB7IEV2ZW50UGF0dGVybiB9IGZyb20gJy4vZXZlbnQtcGF0dGVybic7XG5pbXBvcnQgeyBDZm5SdWxlIH0gZnJvbSAnLi9ldmVudHMuZ2VuZXJhdGVkJztcbmltcG9ydCB7IElSdWxlIH0gZnJvbSAnLi9ydWxlLXJlZic7XG5pbXBvcnQgeyBJUnVsZVRhcmdldCB9IGZyb20gJy4vdGFyZ2V0JztcbmltcG9ydCB7IG1lcmdlRXZlbnRQYXR0ZXJuIH0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBSdWxlUHJvcHMge1xuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgcnVsZSdzIHB1cnBvc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb24uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQSBuYW1lIGZvciB0aGUgcnVsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBV1MgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGVzIGEgdW5pcXVlIHBoeXNpY2FsIElEIGFuZCB1c2VzIHRoYXQgSURcbiAgICogZm9yIHRoZSBydWxlIG5hbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgTmFtZSBUeXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgcnVsZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBydWxlIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NoZWR1bGUgb3IgcmF0ZSAoZnJlcXVlbmN5KSB0aGF0IGRldGVybWluZXMgd2hlbiBDbG91ZFdhdGNoIEV2ZW50c1xuICAgKiBydW5zIHRoZSBydWxlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFNjaGVkdWxlIEV4cHJlc3Npb24gU3ludGF4IGZvclxuICAgKiBSdWxlcyBpbiB0aGUgQW1hem9uIENsb3VkV2F0Y2ggVXNlciBHdWlkZS5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9ldmVudHMvU2NoZWR1bGVkRXZlbnRzLmh0bWxcbiAgICpcbiAgICogWW91IG11c3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LCB0aGUgYGV2ZW50UGF0dGVybmAgcHJvcGVydHksIG9yIGJvdGguXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlRXhwcmVzc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzY3JpYmVzIHdoaWNoIGV2ZW50cyBDbG91ZFdhdGNoIEV2ZW50cyByb3V0ZXMgdG8gdGhlIHNwZWNpZmllZCB0YXJnZXQuXG4gICAqIFRoZXNlIHJvdXRlZCBldmVudHMgYXJlIG1hdGNoZWQgZXZlbnRzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEV2ZW50c1xuICAgKiBhbmQgRXZlbnQgUGF0dGVybnMgaW4gdGhlIEFtYXpvbiBDbG91ZFdhdGNoIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzZWVcbiAgICogaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvQ2xvdWRXYXRjaEV2ZW50c2FuZEV2ZW50UGF0dGVybnMuaHRtbFxuICAgKlxuICAgKiBZb3UgbXVzdCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkgKGVpdGhlciB2aWEgcHJvcHMgb3IgdmlhXG4gICAqIGBhZGRFdmVudFBhdHRlcm5gKSwgdGhlIGBzY2hlZHVsZUV4cHJlc3Npb25gIHByb3BlcnR5LCBvciBib3RoLiBUaGVcbiAgICogbWV0aG9kIGBhZGRFdmVudFBhdHRlcm5gIGNhbiBiZSB1c2VkIHRvIGFkZCBmaWx0ZXIgdmFsdWVzIHRvIHRoZSBldmVudFxuICAgKiBwYXR0ZXJuLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmUuXG4gICAqL1xuICByZWFkb25seSBldmVudFBhdHRlcm4/OiBFdmVudFBhdHRlcm47XG5cbiAgLyoqXG4gICAqIFRhcmdldHMgdG8gaW52b2tlIHdoZW4gdGhpcyBydWxlIG1hdGNoZXMgYW4gZXZlbnQuXG4gICAqXG4gICAqIElucHV0IHdpbGwgYmUgdGhlIGZ1bGwgbWF0Y2hlZCBldmVudC4gSWYgeW91IHdpc2ggdG8gc3BlY2lmeSBjdXN0b21cbiAgICogdGFyZ2V0IGlucHV0LCB1c2UgYGFkZFRhcmdldCh0YXJnZXRbLCBpbnB1dE9wdGlvbnNdKWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gdGFyZ2V0cy5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldHM/OiBJUnVsZVRhcmdldFtdO1xufVxuXG4vKipcbiAqIERlZmluZXMgYSBDbG91ZFdhdGNoIEV2ZW50IFJ1bGUgaW4gdGhpcyBzdGFjay5cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpFdmVudHM6OlJ1bGVcbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bGUgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSdWxlIHtcblxuICBwdWJsaWMgc3RhdGljIGZyb21FdmVudFJ1bGVBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgZXZlbnRSdWxlQXJuOiBzdHJpbmcpOiBJUnVsZSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUnVsZSB7XG4gICAgICBwdWJsaWMgcnVsZUFybiA9IGV2ZW50UnVsZUFybjtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBydWxlQXJuOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRzID0gbmV3IEFycmF5PENmblJ1bGUuVGFyZ2V0UHJvcGVydHk+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRQYXR0ZXJuOiBFdmVudFBhdHRlcm4gPSB7IH07XG4gIHByaXZhdGUgc2NoZWR1bGVFeHByZXNzaW9uPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSdWxlUHJvcHMgPSB7IH0pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgQ2ZuUnVsZSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBuYW1lOiBwcm9wcy5ydWxlTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIHN0YXRlOiBwcm9wcy5lbmFibGVkID09IG51bGwgPyAnRU5BQkxFRCcgOiAocHJvcHMuZW5hYmxlZCA/ICdFTkFCTEVEJyA6ICdESVNBQkxFRCcpLFxuICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiBuZXcgVG9rZW4oKCkgPT4gdGhpcy5zY2hlZHVsZUV4cHJlc3Npb24pLnRvU3RyaW5nKCksXG4gICAgICBldmVudFBhdHRlcm46IG5ldyBUb2tlbigoKSA9PiB0aGlzLnJlbmRlckV2ZW50UGF0dGVybigpKSxcbiAgICAgIHRhcmdldHM6IG5ldyBUb2tlbigoKSA9PiB0aGlzLnJlbmRlclRhcmdldHMoKSksXG4gICAgfSk7XG5cbiAgICB0aGlzLnJ1bGVBcm4gPSByZXNvdXJjZS5ydWxlQXJuO1xuXG4gICAgdGhpcy5hZGRFdmVudFBhdHRlcm4ocHJvcHMuZXZlbnRQYXR0ZXJuKTtcbiAgICB0aGlzLnNjaGVkdWxlRXhwcmVzc2lvbiA9IHByb3BzLnNjaGVkdWxlRXhwcmVzc2lvbjtcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHByb3BzLnRhcmdldHMgfHwgW10pIHtcbiAgICAgIHRoaXMuYWRkVGFyZ2V0KHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB0YXJnZXQgdG8gdGhlIHJ1bGUuIFRoZSBhYnN0cmFjdCBjbGFzcyBSdWxlVGFyZ2V0IGNhbiBiZSBleHRlbmRlZCB0byBkZWZpbmUgbmV3XG4gICAqIHRhcmdldHMuXG4gICAqXG4gICAqIE5vLW9wIGlmIHRhcmdldCBpcyB1bmRlZmluZWQuXG4gICAqL1xuICBwdWJsaWMgYWRkVGFyZ2V0KHRhcmdldD86IElSdWxlVGFyZ2V0KSB7XG4gICAgaWYgKCF0YXJnZXQpIHsgcmV0dXJuOyB9XG5cbiAgICBjb25zdCB0YXJnZXRQcm9wcyA9IHRhcmdldC5iaW5kKHRoaXMpO1xuICAgIGNvbnN0IGlkID0gc2FuaXRpemVJZCh0YXJnZXRQcm9wcy5pZCk7XG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHRhcmdldFByb3BzLmlucHV0ICYmIHRhcmdldFByb3BzLmlucHV0LmJpbmQodGhpcyk7XG5cbiAgICAvLyBjaGVjayBpZiBhIHRhcmdldCB3aXRoIHRoaXMgSUQgYWxyZWFkeSBleGlzdHNcbiAgICBpZiAodGhpcy50YXJnZXRzLmZpbmQodCA9PiB0LmlkID09PSBpZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRHVwbGljYXRlIGV2ZW50IHJ1bGUgdGFyZ2V0IHdpdGggSUQ6ICcgKyBpZCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9sZUFybiA9IHRhcmdldFByb3BzLnJvbGUgPyB0YXJnZXRQcm9wcy5yb2xlLnJvbGVBcm4gOiB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnRhcmdldHMucHVzaCh7XG4gICAgICBpZCxcbiAgICAgIGFybjogdGFyZ2V0UHJvcHMuYXJuLFxuICAgICAgcm9sZUFybixcbiAgICAgIGVjc1BhcmFtZXRlcnM6IHRhcmdldFByb3BzLmVjc1BhcmFtZXRlcnMsXG4gICAgICBraW5lc2lzUGFyYW1ldGVyczogdGFyZ2V0UHJvcHMua2luZXNpc1BhcmFtZXRlcnMsXG4gICAgICBydW5Db21tYW5kUGFyYW1ldGVyczogdGFyZ2V0UHJvcHMucnVuQ29tbWFuZFBhcmFtZXRlcnMsXG4gICAgICBpbnB1dDogaW5wdXRQcm9wcyAmJiBpbnB1dFByb3BzLmlucHV0LFxuICAgICAgaW5wdXRQYXRoOiBpbnB1dFByb3BzICYmIGlucHV0UHJvcHMuaW5wdXRQYXRoLFxuICAgICAgaW5wdXRUcmFuc2Zvcm1lcjogaW5wdXRQcm9wcyAmJiBpbnB1dFByb3BzLmlucHV0VGVtcGxhdGUgIT09IHVuZGVmaW5lZCA/IHtcbiAgICAgICAgaW5wdXRUZW1wbGF0ZTogaW5wdXRQcm9wcy5pbnB1dFRlbXBsYXRlLFxuICAgICAgICBpbnB1dFBhdGhzTWFwOiBpbnB1dFByb3BzLmlucHV0UGF0aHNNYXAsXG4gICAgICB9IDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZXZlbnQgcGF0dGVybiBmaWx0ZXIgdG8gdGhpcyBydWxlLiBJZiBhIHBhdHRlcm4gd2FzIGFscmVhZHkgc3BlY2lmaWVkLFxuICAgKiB0aGVzZSB2YWx1ZXMgYXJlIG1lcmdlZCBpbnRvIHRoZSBleGlzdGluZyBwYXR0ZXJuLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIHJ1bGUgYWxyZWFkeSBjb250YWlucyB0aGUgcGF0dGVybjpcbiAgICpcbiAgICogICAge1xuICAgKiAgICAgIFwicmVzb3VyY2VzXCI6IFsgXCJyMVwiIF0sXG4gICAqICAgICAgXCJkZXRhaWxcIjoge1xuICAgKiAgICAgICAgXCJoZWxsb1wiOiBbIDEgXVxuICAgKiAgICAgIH1cbiAgICogICAgfVxuICAgKlxuICAgKiBBbmQgYGFkZEV2ZW50UGF0dGVybmAgaXMgY2FsbGVkIHdpdGggdGhlIHBhdHRlcm46XG4gICAqXG4gICAqICAgIHtcbiAgICogICAgICBcInJlc291cmNlc1wiOiBbIFwicjJcIiBdLFxuICAgKiAgICAgIFwiZGV0YWlsXCI6IHtcbiAgICogICAgICAgIFwiZm9vXCI6IFsgXCJiYXJcIiBdXG4gICAqICAgICAgfVxuICAgKiAgICB9XG4gICAqXG4gICAqIFRoZSByZXN1bHRpbmcgZXZlbnQgcGF0dGVybiB3aWxsIGJlOlxuICAgKlxuICAgKiAgICB7XG4gICAqICAgICAgXCJyZXNvdXJjZXNcIjogWyBcInIxXCIsIFwicjJcIiBdLFxuICAgKiAgICAgIFwiZGV0YWlsXCI6IHtcbiAgICogICAgICAgIFwiaGVsbG9cIjogWyAxIF0sXG4gICAqICAgICAgICBcImZvb1wiOiBbIFwiYmFyXCIgXVxuICAgKiAgICAgIH1cbiAgICogICAgfVxuICAgKlxuICAgKi9cbiAgcHVibGljIGFkZEV2ZW50UGF0dGVybihldmVudFBhdHRlcm4/OiBFdmVudFBhdHRlcm4pIHtcbiAgICBpZiAoIWV2ZW50UGF0dGVybikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBtZXJnZUV2ZW50UGF0dGVybih0aGlzLmV2ZW50UGF0dGVybiwgZXZlbnRQYXR0ZXJuKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZSgpIHtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5ldmVudFBhdHRlcm4pLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5zY2hlZHVsZUV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybiBbIGBFaXRoZXIgJ2V2ZW50UGF0dGVybicgb3IgJ3NjaGVkdWxlRXhwcmVzc2lvbicgbXVzdCBiZSBkZWZpbmVkYCBdO1xuICAgIH1cblxuICAgIHJldHVybiBbIF07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclRhcmdldHMoKSB7XG4gICAgaWYgKHRoaXMudGFyZ2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0cztcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRXZlbnRQYXR0ZXJuKCkge1xuICAgIGNvbnN0IGV2ZW50UGF0dGVybiA9IHRoaXMuZXZlbnRQYXR0ZXJuO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGV2ZW50UGF0dGVybikubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIHJlbmFtZSAnZGV0YWlsVHlwZScgdG8gJ2RldGFpbC10eXBlJ1xuICAgIGNvbnN0IG91dDogYW55ID0ge307XG4gICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKGV2ZW50UGF0dGVybikpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50UGF0dGVybiBhcyBhbnkpW2tleV07XG4gICAgICBpZiAoa2V5ID09PSAnZGV0YWlsVHlwZScpIHtcbiAgICAgICAga2V5ID0gJ2RldGFpbC10eXBlJztcbiAgICAgIH1cbiAgICAgIG91dFtrZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxufVxuXG4vKipcbiAqIFNhbml0aXplIHdoYXRldmVyIGlzIHJldHVybmVkIHRvIG1ha2UgYSB2YWxpZCBJRFxuICpcbiAqIFJlc3VsdCBtdXN0IG1hdGNoIHJlZ2V4IFtcXC5cXC1fQS1aYS16MC05XStcbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVJZChpZDogc3RyaW5nKSB7XG4gIHJldHVybiBpZC5yZXBsYWNlKC9bXlxcLlxcLV9BLVphLXowLTldL2csICctJyk7XG59Il19

@@ -0,4 +1,22 @@

import iam = require('@aws-cdk/aws-iam');
import { CfnRule } from './events.generated';
export interface EventRuleTargetProps {
import { RuleTargetInput } from './input';
import { IRule } from './rule-ref';
/**
* An abstract target for EventRules.
*/
export interface IRuleTarget {
/**
* Returns the rule target specification.
* NOTE: Do not use the various `inputXxx` options. They can be set in a call to `addTarget`.
*
* @param rule The CloudWatch Event Rule that would trigger this target.
*/
bind(rule: IRule): RuleTargetProperties;
}
/**
* Properties for an event rule target
*/
export interface RuleTargetProperties {
/**
* A unique, user-defined identifier for the target. Acceptable values

@@ -14,8 +32,5 @@ * include alphanumeric characters, periods (.), hyphens (-), and

/**
* The Amazon Resource Name (ARN) of the AWS Identity and Access Management
* (IAM) role to use for this target when the rule is triggered. If one rule
* triggers multiple targets, you can use a different IAM role for each
* target.
* Role to use to invoke this event target
*/
readonly roleArn?: string;
readonly role?: iam.IRole;
/**

@@ -37,15 +52,8 @@ * The Amazon ECS task definition and task count to use, if the event target

readonly runCommandParameters?: CfnRule.RunCommandParametersProperty;
}
/**
* An abstract target for EventRules.
*/
export interface IEventRuleTarget {
/**
* Returns the rule target specification.
* NOTE: Do not use the various `inputXxx` options. They can be set in a call to `addTarget`.
* What input to send to the event target
*
* @param ruleArn The ARN of the CloudWatch Event Rule that would trigger this target.
* @param ruleUniqueId A unique ID for this rule. Can be used to implement idempotency.
* @default the entire event
*/
asEventRuleTarget(ruleArn: string, ruleUniqueId: string): EventRuleTargetProps;
readonly input?: RuleTargetInput;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGFyZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5SdWxlIH0gZnJvbSAnLi9ldmVudHMuZ2VuZXJhdGVkJztcblxuZXhwb3J0IGludGVyZmFjZSBFdmVudFJ1bGVUYXJnZXRQcm9wcyB7XG4gIC8qKlxuICAgKiBBIHVuaXF1ZSwgdXNlci1kZWZpbmVkIGlkZW50aWZpZXIgZm9yIHRoZSB0YXJnZXQuIEFjY2VwdGFibGUgdmFsdWVzXG4gICAqIGluY2x1ZGUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIHBlcmlvZHMgKC4pLCBoeXBoZW5zICgtKSwgYW5kXG4gICAqIHVuZGVyc2NvcmVzIChfKS5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgYXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQVdTIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudFxuICAgKiAoSUFNKSByb2xlIHRvIHVzZSBmb3IgdGhpcyB0YXJnZXQgd2hlbiB0aGUgcnVsZSBpcyB0cmlnZ2VyZWQuIElmIG9uZSBydWxlXG4gICAqIHRyaWdnZXJzIG11bHRpcGxlIHRhcmdldHMsIHlvdSBjYW4gdXNlIGEgZGlmZmVyZW50IElBTSByb2xlIGZvciBlYWNoXG4gICAqIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gRUNTIHRhc2sgZGVmaW5pdGlvbiBhbmQgdGFzayBjb3VudCB0byB1c2UsIGlmIHRoZSBldmVudCB0YXJnZXRcbiAgICogaXMgYW4gQW1hem9uIEVDUyB0YXNrLlxuICAgKi9cbiAgcmVhZG9ubHkgZWNzUGFyYW1ldGVycz86IENmblJ1bGUuRWNzUGFyYW1ldGVyc1Byb3BlcnR5O1xuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyB0aGF0IGNvbnRyb2wgc2hhcmQgYXNzaWdubWVudCwgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgS2luZXNpc1xuICAgKiBzdHJlYW0uIElmIHlvdSBkb24ndCBpbmNsdWRlIHRoaXMgcGFyYW1ldGVyLCBldmVudElkIGlzIHVzZWQgYXMgdGhlXG4gICAqIHBhcnRpdGlvbiBrZXkuXG4gICAqL1xuICByZWFkb25seSBraW5lc2lzUGFyYW1ldGVycz86IENmblJ1bGUuS2luZXNpc1BhcmFtZXRlcnNQcm9wZXJ0eTtcblxuICAvKipcbiAgICogUGFyYW1ldGVycyB1c2VkIHdoZW4gdGhlIHJ1bGUgaW52b2tlcyBBbWF6b24gRUMyIFN5c3RlbXMgTWFuYWdlciBSdW5cbiAgICogQ29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bkNvbW1hbmRQYXJhbWV0ZXJzPzogQ2ZuUnVsZS5SdW5Db21tYW5kUGFyYW1ldGVyc1Byb3BlcnR5O1xufVxuXG4vKipcbiAqIEFuIGFic3RyYWN0IHRhcmdldCBmb3IgRXZlbnRSdWxlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRXZlbnRSdWxlVGFyZ2V0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJ1bGUgdGFyZ2V0IHNwZWNpZmljYXRpb24uXG4gICAqIE5PVEU6IERvIG5vdCB1c2UgdGhlIHZhcmlvdXMgYGlucHV0WHh4YCBvcHRpb25zLiBUaGV5IGNhbiBiZSBzZXQgaW4gYSBjYWxsIHRvIGBhZGRUYXJnZXRgLlxuICAgKlxuICAgKiBAcGFyYW0gcnVsZUFybiBUaGUgQVJOIG9mIHRoZSBDbG91ZFdhdGNoIEV2ZW50IFJ1bGUgdGhhdCB3b3VsZCB0cmlnZ2VyIHRoaXMgdGFyZ2V0LlxuICAgKiBAcGFyYW0gcnVsZVVuaXF1ZUlkIEEgdW5pcXVlIElEIGZvciB0aGlzIHJ1bGUuIENhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBpZGVtcG90ZW5jeS5cbiAgICovXG4gIGFzRXZlbnRSdWxlVGFyZ2V0KHJ1bGVBcm46IHN0cmluZywgcnVsZVVuaXF1ZUlkOiBzdHJpbmcpOiBFdmVudFJ1bGVUYXJnZXRQcm9wcztcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGFyZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaWFtID0gcmVxdWlyZSgnQGF3cy1jZGsvYXdzLWlhbScpO1xuaW1wb3J0IHsgQ2ZuUnVsZSB9IGZyb20gJy4vZXZlbnRzLmdlbmVyYXRlZCc7XG5pbXBvcnQgeyBSdWxlVGFyZ2V0SW5wdXQgfSBmcm9tICcuL2lucHV0JztcbmltcG9ydCB7IElSdWxlIH0gZnJvbSAnLi9ydWxlLXJlZic7XG5cbi8qKlxuICogQW4gYWJzdHJhY3QgdGFyZ2V0IGZvciBFdmVudFJ1bGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSdWxlVGFyZ2V0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJ1bGUgdGFyZ2V0IHNwZWNpZmljYXRpb24uXG4gICAqIE5PVEU6IERvIG5vdCB1c2UgdGhlIHZhcmlvdXMgYGlucHV0WHh4YCBvcHRpb25zLiBUaGV5IGNhbiBiZSBzZXQgaW4gYSBjYWxsIHRvIGBhZGRUYXJnZXRgLlxuICAgKlxuICAgKiBAcGFyYW0gcnVsZSBUaGUgQ2xvdWRXYXRjaCBFdmVudCBSdWxlIHRoYXQgd291bGQgdHJpZ2dlciB0aGlzIHRhcmdldC5cbiAgICovXG4gIGJpbmQocnVsZTogSVJ1bGUpOiBSdWxlVGFyZ2V0UHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBldmVudCBydWxlIHRhcmdldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVUYXJnZXRQcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIEEgdW5pcXVlLCB1c2VyLWRlZmluZWQgaWRlbnRpZmllciBmb3IgdGhlIHRhcmdldC4gQWNjZXB0YWJsZSB2YWx1ZXNcbiAgICogaW5jbHVkZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgcGVyaW9kcyAoLiksIGh5cGhlbnMgKC0pLCBhbmRcbiAgICogdW5kZXJzY29yZXMgKF8pLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSBhcm46IHN0cmluZztcblxuICAvKipcbiAgICogUm9sZSB0byB1c2UgdG8gaW52b2tlIHRoaXMgZXZlbnQgdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSByb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIEVDUyB0YXNrIGRlZmluaXRpb24gYW5kIHRhc2sgY291bnQgdG8gdXNlLCBpZiB0aGUgZXZlbnQgdGFyZ2V0XG4gICAqIGlzIGFuIEFtYXpvbiBFQ1MgdGFzay5cbiAgICovXG4gIHJlYWRvbmx5IGVjc1BhcmFtZXRlcnM/OiBDZm5SdWxlLkVjc1BhcmFtZXRlcnNQcm9wZXJ0eTtcblxuICAvKipcbiAgICogU2V0dGluZ3MgdGhhdCBjb250cm9sIHNoYXJkIGFzc2lnbm1lbnQsIHdoZW4gdGhlIHRhcmdldCBpcyBhIEtpbmVzaXNcbiAgICogc3RyZWFtLiBJZiB5b3UgZG9uJ3QgaW5jbHVkZSB0aGlzIHBhcmFtZXRlciwgZXZlbnRJZCBpcyB1c2VkIGFzIHRoZVxuICAgKiBwYXJ0aXRpb24ga2V5LlxuICAgKi9cbiAgcmVhZG9ubHkga2luZXNpc1BhcmFtZXRlcnM/OiBDZm5SdWxlLktpbmVzaXNQYXJhbWV0ZXJzUHJvcGVydHk7XG5cbiAgLyoqXG4gICAqIFBhcmFtZXRlcnMgdXNlZCB3aGVuIHRoZSBydWxlIGludm9rZXMgQW1hem9uIEVDMiBTeXN0ZW1zIE1hbmFnZXIgUnVuXG4gICAqIENvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSBydW5Db21tYW5kUGFyYW1ldGVycz86IENmblJ1bGUuUnVuQ29tbWFuZFBhcmFtZXRlcnNQcm9wZXJ0eTtcblxuICAvKipcbiAgICogV2hhdCBpbnB1dCB0byBzZW5kIHRvIHRoZSBldmVudCB0YXJnZXRcbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIGVudGlyZSBldmVudFxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXQ/OiBSdWxlVGFyZ2V0SW5wdXQ7XG59Il19

@@ -20,2 +20,5 @@ "use strict";

const destValue = destObj[field];
if (srcValue === undefined) {
continue;
}
if (typeof (srcValue) !== 'object') {

@@ -25,3 +28,3 @@ throw new Error(`Invalid event pattern field { ${field}: ${JSON.stringify(srcValue)} }. All fields must be arrays`);

// dest doesn't have this field
if (!(field in destObj)) {
if (destObj[field] === undefined) {
destObj[field] = srcValue;

@@ -45,2 +48,2 @@ continue;

exports.mergeEventPattern = mergeEventPattern;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7R0FLRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLElBQVMsRUFBRSxHQUFRO0lBQ25ELElBQUksR0FBRyxJQUFJLElBQUksRUFBRyxDQUFDO0lBRW5CLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFdkIsT0FBTyxJQUFJLENBQUM7SUFFWixTQUFTLFdBQVcsQ0FBQyxPQUFZLEVBQUUsTUFBVztRQUM1QyxJQUFJLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsb0NBQW9DLENBQUMsQ0FBQztTQUN2RztRQUVELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUV2QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWpDLElBQUksT0FBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsS0FBSyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLCtCQUErQixDQUFDLENBQUM7YUFDckg7WUFFRCwrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxFQUFFO2dCQUN2QixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDO2dCQUMxQixTQUFTO2FBQ1Y7WUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsS0FBSyxJQUFJO29CQUN0RCwwQ0FBMEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3hIO1lBRUQseUNBQXlDO1lBQ3pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzVDLFNBQVM7YUFDVjtZQUVELHdDQUF3QztZQUN4QyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUExQ0QsOENBMENDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZXJnZSB0aGUgYHNyY2AgZXZlbnQgcGF0dGVybiBpbnRvIHRoZSBgZGVzdGAgZXZlbnQgcGF0dGVybiBieSBhZGRpbmcgYWxsXG4gKiB2YWx1ZXMgZnJvbSBgc3JjYCBpbnRvIHRoZSBmaWVsZHMgaW4gYGRlc3RgLlxuICpcbiAqIFNlZSBgcnVsZS5hZGRFdmVudFBhdHRlcm5gIGZvciBkZXRhaWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFdmVudFBhdHRlcm4oZGVzdDogYW55LCBzcmM6IGFueSkge1xuICBkZXN0ID0gZGVzdCB8fCB7IH07XG5cbiAgbWVyZ2VPYmplY3QoZGVzdCwgc3JjKTtcblxuICByZXR1cm4gZGVzdDtcblxuICBmdW5jdGlvbiBtZXJnZU9iamVjdChkZXN0T2JqOiBhbnksIHNyY09iajogYW55KSB7XG4gICAgaWYgKHR5cGVvZihzcmNPYmopICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGV2ZW50IHBhdHRlcm4gJyR7SlNPTi5zdHJpbmdpZnkoc3JjT2JqKX0nLCBleHBlY3RpbmcgYW4gb2JqZWN0IG9yIGFuIGFycmF5YCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBPYmplY3Qua2V5cyhzcmNPYmopKSB7XG5cbiAgICAgIGNvbnN0IHNyY1ZhbHVlID0gc3JjT2JqW2ZpZWxkXTtcbiAgICAgIGNvbnN0IGRlc3RWYWx1ZSA9IGRlc3RPYmpbZmllbGRdO1xuXG4gICAgICBpZiAodHlwZW9mKHNyY1ZhbHVlKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGV2ZW50IHBhdHRlcm4gZmllbGQgeyAke2ZpZWxkfTogJHtKU09OLnN0cmluZ2lmeShzcmNWYWx1ZSl9IH0uIEFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXNgKTtcbiAgICAgIH1cblxuICAgICAgLy8gZGVzdCBkb2Vzbid0IGhhdmUgdGhpcyBmaWVsZFxuICAgICAgaWYgKCEoZmllbGQgaW4gZGVzdE9iaikpIHtcbiAgICAgICAgZGVzdE9ialtmaWVsZF0gPSBzcmNWYWx1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNyY1ZhbHVlKSAhPT0gQXJyYXkuaXNBcnJheShkZXN0VmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBldmVudCBwYXR0ZXJuIGZpZWxkICR7ZmllbGR9LiBgICtcbiAgICAgICAgICBgVHlwZSBtaXNtYXRjaCBiZXR3ZWVuIGV4aXN0aW5nIHBhdHRlcm4gJHtKU09OLnN0cmluZ2lmeShkZXN0VmFsdWUpfSBhbmQgYWRkZWQgcGF0dGVybiAke0pTT04uc3RyaW5naWZ5KHNyY1ZhbHVlKX1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSwgY29uY2F0IHRoZSB2YWx1ZXNcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNyY1ZhbHVlKSkge1xuICAgICAgICBkZXN0T2JqW2ZpZWxkXSA9IGRlc3RWYWx1ZS5jb25jYXQoc3JjVmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gb3RoZXJ3aXNlLCBpdCdzIGFuIG9iamVjdCwgc28gcmVjdXJzZVxuICAgICAgbWVyZ2VPYmplY3QoZGVzdE9ialtmaWVsZF0sIHNyY1ZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7R0FLRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLElBQVMsRUFBRSxHQUFRO0lBQ25ELElBQUksR0FBRyxJQUFJLElBQUksRUFBRyxDQUFDO0lBRW5CLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFdkIsT0FBTyxJQUFJLENBQUM7SUFFWixTQUFTLFdBQVcsQ0FBQyxPQUFZLEVBQUUsTUFBVztRQUM1QyxJQUFJLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsb0NBQW9DLENBQUMsQ0FBQztTQUN2RztRQUVELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUV2QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWpDLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtnQkFBRSxTQUFTO2FBQUU7WUFFekMsSUFBSSxPQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxLQUFLLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUMsQ0FBQzthQUNySDtZQUVELCtCQUErQjtZQUMvQixJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLEVBQUU7Z0JBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7Z0JBQzFCLFNBQVM7YUFDVjtZQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUN4RCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixLQUFLLElBQUk7b0JBQ3RELDBDQUEwQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDeEg7WUFFRCx5Q0FBeUM7WUFDekMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUMsU0FBUzthQUNWO1lBRUQsd0NBQXdDO1lBQ3hDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQTVDRCw4Q0E0Q0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1lcmdlIHRoZSBgc3JjYCBldmVudCBwYXR0ZXJuIGludG8gdGhlIGBkZXN0YCBldmVudCBwYXR0ZXJuIGJ5IGFkZGluZyBhbGxcbiAqIHZhbHVlcyBmcm9tIGBzcmNgIGludG8gdGhlIGZpZWxkcyBpbiBgZGVzdGAuXG4gKlxuICogU2VlIGBydWxlLmFkZEV2ZW50UGF0dGVybmAgZm9yIGRldGFpbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUV2ZW50UGF0dGVybihkZXN0OiBhbnksIHNyYzogYW55KSB7XG4gIGRlc3QgPSBkZXN0IHx8IHsgfTtcblxuICBtZXJnZU9iamVjdChkZXN0LCBzcmMpO1xuXG4gIHJldHVybiBkZXN0O1xuXG4gIGZ1bmN0aW9uIG1lcmdlT2JqZWN0KGRlc3RPYmo6IGFueSwgc3JjT2JqOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mKHNyY09iaikgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZXZlbnQgcGF0dGVybiAnJHtKU09OLnN0cmluZ2lmeShzcmNPYmopfScsIGV4cGVjdGluZyBhbiBvYmplY3Qgb3IgYW4gYXJyYXlgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIE9iamVjdC5rZXlzKHNyY09iaikpIHtcblxuICAgICAgY29uc3Qgc3JjVmFsdWUgPSBzcmNPYmpbZmllbGRdO1xuICAgICAgY29uc3QgZGVzdFZhbHVlID0gZGVzdE9ialtmaWVsZF07XG5cbiAgICAgIGlmIChzcmNWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgIGlmICh0eXBlb2Yoc3JjVmFsdWUpICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZXZlbnQgcGF0dGVybiBmaWVsZCB7ICR7ZmllbGR9OiAke0pTT04uc3RyaW5naWZ5KHNyY1ZhbHVlKX0gfS4gQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5c2ApO1xuICAgICAgfVxuXG4gICAgICAvLyBkZXN0IGRvZXNuJ3QgaGF2ZSB0aGlzIGZpZWxkXG4gICAgICBpZiAoZGVzdE9ialtmaWVsZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZXN0T2JqW2ZpZWxkXSA9IHNyY1ZhbHVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpICE9PSBBcnJheS5pc0FycmF5KGRlc3RWYWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGV2ZW50IHBhdHRlcm4gZmllbGQgJHtmaWVsZH0uIGAgK1xuICAgICAgICAgIGBUeXBlIG1pc21hdGNoIGJldHdlZW4gZXhpc3RpbmcgcGF0dGVybiAke0pTT04uc3RyaW5naWZ5KGRlc3RWYWx1ZSl9IGFuZCBhZGRlZCBwYXR0ZXJuICR7SlNPTi5zdHJpbmdpZnkoc3JjVmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGlzIGlzIGFuIGFycmF5LCBjb25jYXQgdGhlIHZhbHVlc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG4gICAgICAgIGRlc3RPYmpbZmllbGRdID0gZGVzdFZhbHVlLmNvbmNhdChzcmNWYWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBvdGhlcndpc2UsIGl0J3MgYW4gb2JqZWN0LCBzbyByZWN1cnNlXG4gICAgICBtZXJnZU9iamVjdChkZXN0T2JqW2ZpZWxkXSwgc3JjVmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIl19
{
"name": "@aws-cdk/aws-events",
"version": "0.31.0",
"version": "0.32.0",
"description": "AWS CloudWatch Events Construct Library",

@@ -43,3 +43,5 @@ "main": "lib/index.js",

"awslint": "cdk-awslint",
"cfn2ts": "cfn2ts"
"cfn2ts": "cfn2ts",
"build+test+package": "npm run build+test && npm run package",
"build+test": "npm run build && npm test"
},

@@ -63,19 +65,24 @@ "cdk-build": {

"devDependencies": {
"@aws-cdk/assert": "^0.31.0",
"cdk-build-tools": "^0.31.0",
"cfn2ts": "^0.31.0",
"pkglint": "^0.31.0"
"@aws-cdk/assert": "^0.32.0",
"cdk-build-tools": "^0.32.0",
"cfn2ts": "^0.32.0",
"pkglint": "^0.32.0"
},
"dependencies": {
"@aws-cdk/aws-iam": "^0.31.0",
"@aws-cdk/cdk": "^0.31.0"
"@aws-cdk/aws-iam": "^0.32.0",
"@aws-cdk/cdk": "^0.32.0"
},
"homepage": "https://github.com/awslabs/aws-cdk",
"peerDependencies": {
"@aws-cdk/aws-iam": "^0.31.0",
"@aws-cdk/cdk": "^0.31.0"
"@aws-cdk/aws-iam": "^0.32.0",
"@aws-cdk/cdk": "^0.32.0"
},
"engines": {
"node": ">= 8.10.0"
},
"awslint": {
"exclude": [
"from-method:@aws-cdk/aws-events.Rule"
]
}
}

@@ -31,3 +31,3 @@ ## AWS CloudWatch Events Construct Library

The `EventRule` construct defines a CloudWatch events rule which monitors an
The `Rule` construct defines a CloudWatch events rule which monitors an
event based on an [event

@@ -39,3 +39,3 @@ pattern](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html)

Normally, you will use one of the `source.onXxx(name[, target[, options]]) ->
EventRule` methods on the event source to define an event rule associated with
Rule` methods on the event source to define an event rule associated with
the specific activity. You can targets either via props, or add targets using

@@ -70,3 +70,3 @@ `rule.addTarget`.

The `@aws-cdk/aws-events-targets` module includes classes that implement the `IEventRuleTarget`
The `@aws-cdk/aws-events-targets` module includes classes that implement the `IRuleTarget`
interface for various AWS services.

@@ -73,0 +73,0 @@

@@ -10,12 +10,5 @@ import { Test } from 'nodeunit';

'input template can contain tokens'(test: Test): void;
'target can declare role which will be used'(test: Test): void;
'asEventRuleTarget can use the ruleArn and a uniqueId of the rule'(test: Test): void;
'import/export rule'(test: Test): void;
'json template': {
'can just be a JSON object'(test: Test): void;
};
'text templates': {
'strings with newlines are serialized to a newline-delimited list of JSON strings'(test: Test): void;
'escaped newlines are not interpreted as newlines'(test: Test): void;
'can use Tokens in text templates'(test: Test): void;
};
'fromEventRuleArn'(test: Test): void;
'rule can be disabled'(test: Test): void;

@@ -22,0 +15,0 @@ 'fails if multiple targets with the same id are added'(test: Test): void;

"use strict";
const assert_1 = require("@aws-cdk/assert");
const iam = require("@aws-cdk/aws-iam");
const aws_iam_1 = require("@aws-cdk/aws-iam");
const cdk = require("@aws-cdk/cdk");
const cdk_1 = require("@aws-cdk/cdk");
const lib_1 = require("../lib");
const rule_1 = require("../lib/rule");
class SomeTarget {
asEventRuleTarget() {
bind() {
return {

@@ -16,3 +19,3 @@ id: 'T1', arn: 'ARN1', kinesisParameters: { partitionKeyPath: 'partitionKeyPath' }

const stack = new cdk.Stack();
new rule_1.EventRule(stack, 'MyRule', {
new rule_1.Rule(stack, 'MyRule', {
scheduleExpression: 'rate(10 minutes)'

@@ -37,3 +40,3 @@ });

// WHEN
new rule_1.EventRule(stack, 'MyRule', {
new rule_1.Rule(stack, 'MyRule', {
ruleName: 'PhysicalName',

@@ -50,3 +53,3 @@ scheduleExpression: 'rate(10 minutes)'

const stack = new cdk.Stack();
new rule_1.EventRule(stack, 'MyRule', {
new rule_1.Rule(stack, 'MyRule', {
eventPattern: {

@@ -92,3 +95,3 @@ account: ['account1', 'account2'],

const stack = new cdk.Stack(app, 'MyStack');
new rule_1.EventRule(stack, 'Rule');
new rule_1.Rule(stack, 'Rule');
test.throws(() => app.synthesizeStack(stack.name), /Either 'eventPattern' or 'scheduleExpression' must be defined/);

@@ -99,3 +102,3 @@ test.done();

const stack = new cdk.Stack();
const rule = new rule_1.EventRule(stack, 'MyRule');
const rule = new rule_1.Rule(stack, 'MyRule');
rule.addEventPattern({

@@ -150,3 +153,3 @@ account: ['12345'],

const t1 = {
asEventRuleTarget: () => ({
bind: () => ({
id: 'T1',

@@ -158,18 +161,13 @@ arn: 'ARN1',

const t2 = {
asEventRuleTarget: () => ({
bind: () => ({
id: 'T2',
arn: 'ARN2',
roleArn: 'IAM-ROLE-ARN'
input: lib_1.RuleTargetInput.fromText(`This is ${lib_1.EventField.fromPath('$.detail.bla', 'bla')}`),
})
};
const rule = new rule_1.EventRule(stack, 'EventRule', {
const rule = new rule_1.Rule(stack, 'EventRule', {
targets: [t1],
scheduleExpression: 'rate(5 minutes)'
});
rule.addTarget(t2, {
textTemplate: 'This is <bla>',
pathsMap: {
bla: '$.detail.bla'
}
});
rule.addTarget(t2);
assert_1.expect(stack).toMatch({

@@ -199,3 +197,2 @@ "Resources": {

},
"RoleArn": "IAM-ROLE-ARN"
}

@@ -211,31 +208,30 @@ ]

const stack = new cdk.Stack();
const t1 = {
asEventRuleTarget: () => ({
id: 'T1', arn: 'ARN1', kinesisParameters: { partitionKeyPath: 'partitionKeyPath' }
const rule = new rule_1.Rule(stack, 'EventRule', { scheduleExpression: 'rate(1 minute)' });
// a plain string should just be stringified (i.e. double quotes added and escaped)
rule.addTarget({
bind: () => ({
id: 'T2', arn: 'ARN2', input: lib_1.RuleTargetInput.fromText('Hello, "world"')
})
};
const t2 = { asEventRuleTarget: () => ({ id: 'T2', arn: 'ARN2', roleArn: 'IAM-ROLE-ARN' }) };
const t3 = { asEventRuleTarget: () => ({ id: 'T3', arn: 'ARN3' }) };
const t4 = { asEventRuleTarget: () => ({ id: 'T4', arn: 'ARN4' }) };
const rule = new rule_1.EventRule(stack, 'EventRule', { scheduleExpression: 'rate(1 minute)' });
// a plain string should just be stringified (i.e. double quotes added and escaped)
rule.addTarget(t2, {
textTemplate: 'Hello, "world"'
});
// tokens are used here (FnConcat), but this is a text template so we
// expect it to be wrapped in double quotes automatically for us.
rule.addTarget(t1, {
textTemplate: cdk.Fn.join('', ['a', 'b']).toString()
rule.addTarget({
bind: () => ({
id: 'T1', arn: 'ARN1', kinesisParameters: { partitionKeyPath: 'partitionKeyPath' },
input: lib_1.RuleTargetInput.fromText(cdk.Fn.join('', ['a', 'b']).toString()),
})
});
// jsonTemplate can be used to format JSON documents with replacements
rule.addTarget(t3, {
jsonTemplate: '{ "foo": <bar> }',
pathsMap: {
bar: '$.detail.bar'
}
rule.addTarget({
bind: () => ({
id: 'T3', arn: 'ARN3',
input: lib_1.RuleTargetInput.fromObject({ foo: lib_1.EventField.fromPath('$.detail.bar') }),
})
});
// tokens can also used for JSON templates, but that means escaping is
// the responsibility of the user.
rule.addTarget(t4, {
jsonTemplate: cdk.Fn.join(' ', ['"', 'hello', '\"world\"', '"']),
// tokens can also used for JSON templates.
rule.addTarget({
bind: () => ({
id: 'T4', arn: 'ARN4',
input: lib_1.RuleTargetInput.fromText(cdk.Fn.join(' ', ['hello', '"world"']).toString()),
})
});

@@ -253,6 +249,3 @@ assert_1.expect(stack).toMatch({

"Id": "T2",
"InputTransformer": {
"InputTemplate": "\"Hello, \\\"world\\\"\""
},
"RoleArn": "IAM-ROLE-ARN"
"Input": '"Hello, \\"world\\""',
},

@@ -262,5 +255,3 @@ {

"Id": "T1",
"InputTransformer": {
"InputTemplate": "\"ab\""
},
"Input": "\"ab\"",
"KinesisParameters": {

@@ -275,5 +266,5 @@ "PartitionKeyPath": "partitionKeyPath"

"InputPathsMap": {
"bar": "$.detail.bar"
"f1": "$.detail.bar"
},
"InputTemplate": "{ \"foo\": <bar> }"
"InputTemplate": "{\"foo\":<f1>}"
}

@@ -284,5 +275,3 @@ },

"Id": "T4",
"InputTransformer": {
"InputTemplate": "\" hello \"world\" \""
}
"Input": '"hello \\"world\\""'
}

@@ -296,2 +285,29 @@ ]

},
'target can declare role which will be used'(test) {
// GIVEN
const stack = new cdk.Stack();
const rule = new rule_1.Rule(stack, 'EventRule', { scheduleExpression: 'rate(1 minute)' });
const role = new iam.Role(stack, 'SomeRole', {
assumedBy: new aws_iam_1.ServicePrincipal('nobody')
});
// a plain string should just be stringified (i.e. double quotes added and escaped)
rule.addTarget({
bind: () => ({
id: 'T2',
arn: 'ARN2',
role,
})
});
// THEN
assert_1.expect(stack).to(assert_1.haveResourceLike('AWS::Events::Rule', {
"Targets": [
{
"Arn": "ARN2",
"Id": "T2",
"RoleArn": { "Fn::GetAtt": ["SomeRole6DDC54DD", "Arn"] }
}
]
}));
test.done();
},
'asEventRuleTarget can use the ruleArn and a uniqueId of the rule'(test) {

@@ -302,5 +318,5 @@ const stack = new cdk.Stack();

const t1 = {
asEventRuleTarget: (ruleArn, ruleId) => {
receivedRuleArn = ruleArn;
receivedRuleId = ruleId;
bind: (eventRule) => {
receivedRuleArn = eventRule.ruleArn;
receivedRuleId = eventRule.node.uniqueId;
return {

@@ -313,3 +329,3 @@ id: 'T1',

};
const rule = new rule_1.EventRule(stack, 'EventRule');
const rule = new rule_1.Rule(stack, 'EventRule');
rule.addTarget(t1);

@@ -320,107 +336,11 @@ test.deepEqual(stack.node.resolve(receivedRuleArn), stack.node.resolve(rule.ruleArn));

},
'import/export rule'(test) {
'fromEventRuleArn'(test) {
// GIVEN
const stack = new cdk_1.Stack();
const myRule = new rule_1.EventRule(stack, 'MyRule');
// WHEN
const exportedRule = myRule.export();
const importedRule = rule_1.EventRule.fromEventRuleArn(stack, 'ImportedRule', 'arn:of:rule');
const importedRule = rule_1.Rule.fromEventRuleArn(stack, 'ImportedRule', 'arn:of:rule');
// THEN
test.deepEqual(stack.node.resolve(exportedRule), { eventRuleArn: { 'Fn::ImportValue': 'Stack:MyRuleRuleArnDB13ADB1' } });
test.deepEqual(importedRule.ruleArn, 'arn:of:rule');
test.done();
},
'json template': {
'can just be a JSON object'(test) {
// GIVEN
const stack = new cdk_1.Stack();
const rule = new rule_1.EventRule(stack, 'Rule', {
scheduleExpression: 'rate(1 minute)'
});
// WHEN
rule.addTarget(new SomeTarget(), {
jsonTemplate: { SomeObject: 'withAValue' },
});
// THEN
assert_1.expect(stack).to(assert_1.haveResourceLike('AWS::Events::Rule', {
Targets: [
{
InputTransformer: {
InputTemplate: "{\"SomeObject\":\"withAValue\"}"
},
}
]
}));
test.done();
},
},
'text templates': {
'strings with newlines are serialized to a newline-delimited list of JSON strings'(test) {
// GIVEN
const stack = new cdk_1.Stack();
const rule = new rule_1.EventRule(stack, 'Rule', {
scheduleExpression: 'rate(1 minute)'
});
// WHEN
rule.addTarget(new SomeTarget(), {
textTemplate: 'I have\nmultiple lines',
});
// THEN
assert_1.expect(stack).to(assert_1.haveResourceLike('AWS::Events::Rule', {
Targets: [
{
InputTransformer: {
InputTemplate: "\"I have\"\n\"multiple lines\""
},
}
]
}));
test.done();
},
'escaped newlines are not interpreted as newlines'(test) {
// GIVEN
const stack = new cdk_1.Stack();
const rule = new rule_1.EventRule(stack, 'Rule', {
scheduleExpression: 'rate(1 minute)'
});
// WHEN
rule.addTarget(new SomeTarget(), {
textTemplate: 'this is not\\na real newline',
});
// THEN
assert_1.expect(stack).to(assert_1.haveResourceLike('AWS::Events::Rule', {
Targets: [
{
InputTransformer: {
InputTemplate: "\"this is not\\\\na real newline\""
},
}
]
}));
test.done();
},
'can use Tokens in text templates'(test) {
// GIVEN
const stack = new cdk_1.Stack();
const rule = new rule_1.EventRule(stack, 'Rule', {
scheduleExpression: 'rate(1 minute)'
});
const world = new cdk.Token(() => 'world');
// WHEN
rule.addTarget(new SomeTarget(), {
textTemplate: `hello ${world}`,
});
// THEN
assert_1.expect(stack).to(assert_1.haveResourceLike('AWS::Events::Rule', {
Targets: [
{
InputTransformer: {
InputTemplate: "\"hello world\""
},
}
]
}));
test.done();
}
},
'rule can be disabled'(test) {

@@ -430,3 +350,3 @@ // GIVEN

// WHEN
new rule_1.EventRule(stack, 'Rule', {
new rule_1.Rule(stack, 'Rule', {
scheduleExpression: 'foom',

@@ -444,3 +364,3 @@ enabled: false

const stack = new cdk.Stack();
const rule = new rule_1.EventRule(stack, 'Rule', {
const rule = new rule_1.Rule(stack, 'Rule', {
scheduleExpression: 'foom',

@@ -455,2 +375,2 @@ enabled: false

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5ydWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0Q0FBeUU7QUFDekUsb0NBQXFDO0FBQ3JDLHNDQUFxQztBQUdyQyxzQ0FBd0M7QUF5ZXhDLE1BQU0sVUFBVTtJQUNQLGlCQUFpQjtRQUN0QixPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUU7U0FDbkYsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTNlRCxpQkFBUztJQUNQLGNBQWMsQ0FBQyxJQUFVO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTlCLElBQUksZ0JBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO1lBQzdCLGtCQUFrQixFQUFFLGtCQUFrQjtTQUN2QyxDQUFDLENBQUM7UUFFSCxlQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3BCLFdBQVcsRUFBRTtnQkFDWCxnQkFBZ0IsRUFBRTtvQkFDbEIsTUFBTSxFQUFFLG1CQUFtQjtvQkFDM0IsWUFBWSxFQUFFO3dCQUNaLG9CQUFvQixFQUFFLGtCQUFrQjt3QkFDeEMsT0FBTyxFQUFFLFNBQVM7cUJBQ25CO2lCQUNBO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQseUJBQXlCLENBQUMsSUFBVTtRQUNsQyxRQUFRO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFOUIsT0FBTztRQUNQLElBQUksZ0JBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO1lBQy9CLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLGtCQUFrQixFQUFFLGtCQUFrQjtTQUNyQyxDQUFDLENB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SSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsQ0FBQztLQUNGO0lBRUQsc0JBQXNCLENBQUMsSUFBVTtRQUMvQixRQUFRO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFOUIsT0FBTztRQUNQLElBQUksZ0JBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQzNCLGtCQUFrQixFQUFFLE1BQU07WUFDMUIsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsZUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxxQkFBWSxDQUFDLG1CQUFtQixFQUFFO1lBQ2pELE9BQU8sRUFBRSxVQUFVO1NBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUosSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELHNEQUFzRCxDQUFDLElBQVU7UUFDL0QsUUFBUTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksZ0JBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQ3hDLGtCQUFrQixFQUFFLE1BQU07WUFDMUIsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztRQUVqQyxPQUFPO1FBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCBoYXZlUmVzb3VyY2UsIGhhdmVSZXNvdXJjZUxpa2UgfSBmcm9tICdAYXdzLWNkay9hc3NlcnQnO1xuaW1wb3J0IGNkayA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2NkaycpO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdAYXdzLWNkay9jZGsnO1xuaW1wb3J0IHsgVGVzdCB9IGZyb20gJ25vZGV1bml0JztcbmltcG9ydCB7IElFdmVudFJ1bGVUYXJnZXQgfSBmcm9tICcuLi9saWInO1xuaW1wb3J0IHsgRXZlbnRSdWxlIH0gZnJvbSAnLi4vbGliL3J1bGUnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTpvYmplY3QtbGl0ZXJhbC1rZXktcXVvdGVzXG5cbmV4cG9ydCA9IHtcbiAgJ2RlZmF1bHQgcnVsZScodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gICAgbmV3IEV2ZW50UnVsZShzdGFjaywgJ015UnVsZScsIHtcbiAgICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogJ3JhdGUoMTAgbWludXRlcyknXG4gICAgfSk7XG5cbiAgICBleHBlY3Qoc3RhY2spLnRvTWF0Y2goe1xuICAgICAgXCJSZXNvdXJjZXNcIjoge1xuICAgICAgICBcIk15UnVsZUE0NEFCODMxXCI6IHtcbiAgICAgICAgXCJUeXBlXCI6IFwiQVdTOjpFdmVudHM6OlJ1bGVcIixcbiAgICAgICAgXCJQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIlNjaGVkdWxlRXhwcmVzc2lvblwiOiBcInJhdGUoMTAgbWludXRlcylcIixcbiAgICAgICAgICBcIlN0YXRlXCI6IFwiRU5BQkxFRFwiXG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdydWxlIHdpdGggcGh5c2ljYWwgbmFtZScodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgbmV3IEV2ZW50UnVsZShzdGFjaywgJ015UnVsZScsIHtcbiAgICBydWxlTmFtZTogJ1BoeXNpY2FsTmFtZScsXG4gICAgc2NoZWR1bGVFeHByZXNzaW9uOiAncmF0ZSgxMCBtaW51dGVzKSdcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnQVdTOjpFdmVudHM6OlJ1bGUnLCB7XG4gICAgTmFtZTogJ1BoeXNpY2FsTmFtZSdcbiAgICB9KSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnZXZlbnRQYXR0ZXJuIGlzIHJlbmRlcmVkIHByb3Blcmx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgICBuZXcgRXZlbnRSdWxlKHN0YWNrLCAnTXlSdWxlJywge1xuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIGFjY291bnQ6IFsgJ2FjY291bnQxJywgJ2FjY291bnQyJyBdLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBmb286IFsgMSwgMiBdLFxuICAgICAgICB9LFxuICAgICAgICBkZXRhaWxUeXBlOiBbICdkZXRhaWxUeXBlMScgXSxcbiAgICAgICAgaWQ6IFsgJ2lkMScsICdpZDInIF0sXG4gICAgICAgIHJlZ2lvbjogWyAncmVnaW9uMScsICdyZWdpb24yJywgJ3JlZ2lvbjMnIF0sXG4gICAgICAgIHJlc291cmNlczogWyAncjEnIF0sXG4gICAgICAgIHNvdXJjZTogWyAnc3JjMScsICdzcmMyJyBdLFxuICAgICAgICB0aW1lOiBbICd0MScgXSxcbiAgICAgICAgdmVyc2lvbjogWyAnMCcgXVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHN0YWNrKS50b01hdGNoKHtcbiAgICAgIFwiUmVzb3VyY2VzXCI6IHtcbiAgICAgICAgXCJNeVJ1bGVBNDRBQjgzMVwiOiB7XG4gICAgICAgIFwiVHlwZVwiOiBcIkFXUzo6RXZlbnRzOjpSdWxlXCIsXG4gICAgICAgIFwiUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJFdmVudFBhdHRlcm5cIjoge1xuICAgICAgICAgICAgYWNjb3VudDogWyAnYWNjb3VudDEnLCAnYWNjb3VudDInIF0sXG4gICAgICAgICAgICBkZXRhaWw6IHsgZm9vOiBbIDEsIDIgXSB9LFxuICAgICAgICAgICAgJ2RldGFpbC10eXBlJzogWyAnZGV0YWlsVHlwZTEnIF0sXG4gICAgICAgICAgICBpZDogWyAnaWQxJywgJ2lkMicgXSxcbiAgICAgICAgICAgIHJlZ2lvbjogWyAncmVnaW9uMScsICdyZWdpb24yJywgJ3JlZ2lvbjMnIF0sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFsgJ3IxJyBdLFxuICAgICAgICAgICAgc291cmNlOiBbICdzcmMxJywgJ3NyYzInIF0sXG4gICAgICAgICAgICB0aW1lOiBbICd0MScgXSxcbiAgICAgICAgICAgIHZlcnNpb246IFsgJzAnIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiU3RhdGVcIjogXCJFTkFCTEVEXCJcbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnZmFpbHMgc3ludGhlc2lzIGlmIG5laXRoZXIgZXZlbnRQYXR0ZXJuIG5vciBzY2hldWRsZUV4cHJlc3Npb24gYXJlIHNwZWNpZmllZCcodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKGFwcCwgJ015U3RhY2snKTtcbiAgICBuZXcgRXZlbnRSdWxlKHN0YWNrLCAnUnVsZScpO1xuICAgIHRlc3QudGhyb3dzKCgpID0+IGFwcC5zeW50aGVzaXplU3RhY2soc3RhY2submFtZSksIC9FaXRoZXIgJ2V2ZW50UGF0dGVybicgb3IgJ3NjaGVkdWxlRXhwcmVzc2lvbicgbXVzdCBiZSBkZWZpbmVkLyk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2FkZEV2ZW50UGF0dGVybiBjYW4gYmUgdXNlZCB0byBhZGQgZmlsdGVycycodGVzdDogVGVzdCkge1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBFdmVudFJ1bGUoc3RhY2ssICdNeVJ1bGUnKTtcbiAgICBydWxlLmFkZEV2ZW50UGF0dGVybih7XG4gICAgICBhY2NvdW50OiBbICcxMjM0NScgXSxcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBmb286IFsgJ2hlbGxvJyBdXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBydWxlLmFkZEV2ZW50UGF0dGVybih7XG4gICAgICBzb3VyY2U6IFsgJ2F3cy5zb3VyY2UnIF0sXG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgZm9vOiBbICdiYXInIF0sXG4gICAgICAgIGdvbzoge1xuICAgICAgICAgIGhlbGxvOiBbICd3b3JsZCcgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBleHBlY3Qoc3RhY2spLnRvTWF0Y2goe1xuICAgICAgXCJSZXNvdXJjZXNcIjoge1xuICAgICAgICBcIk15UnVsZUE0NEFCODMxXCI6IHtcbiAgICAgICAgXCJUeXBlXCI6IFwiQVdTOjpFdmVudHM6OlJ1bGVcIixcbiAgICAgICAgXCJQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIkV2ZW50UGF0dGVyblwiOiB7XG4gICAgICAgICAgXCJhY2NvdW50XCI6IFtcbiAgICAgICAgICAgIFwiMTIzNDVcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJkZXRhaWxcIjoge1xuICAgICAgICAgICAgXCJmb29cIjogW1xuICAgICAgICAgICAgXCJoZWxsb1wiLFxuICAgICAgICAgICAgXCJiYXJcIlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiZ29vXCI6IHtcbiAgICAgICAgICAgIFwiaGVsbG9cIjogW1xuICAgICAgICAgICAgICBcIndvcmxkXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic291cmNlXCI6IFtcbiAgICAgICAgICAgIFwiYXdzLnNvdXJjZVwiXG4gICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJTdGF0ZVwiOiBcIkVOQUJMRURcIlxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAndGFyZ2V0cyBjYW4gYmUgYWRkZWQgdmlhIHByb3BzIG9yIGFkZFRhcmdldCB3aXRoIGlucHV0IHRyYW5zZm9ybWVyJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG4gICAgY29uc3QgdDE6IElFdmVudFJ1bGVUYXJnZXQgPSB7XG4gICAgICBhc0V2ZW50UnVsZVRhcmdldDogKCkgPT4gKHtcbiAgICAgICAgaWQ6ICdUMScsXG4gICAgICAgIGFybjogJ0FSTjEnLFxuICAgICAgICBraW5lc2lzUGFyYW1ldGVyczogeyBwYXJ0aXRpb25LZXlQYXRoOiAncGFydGl0aW9uS2V5UGF0aCcgfVxuICAgICAgfSlcbiAgICB9O1xuXG4gICAgY29uc3QgdDI6IElFdmVudFJ1bGVUYXJnZXQgPSB7XG4gICAgICBhc0V2ZW50UnVsZVRhcmdldDogKCkgPT4gKHtcbiAgICAgICAgaWQ6ICdUMicsXG4gICAgICAgIGFybjogJ0FSTjInLFxuICAgICAgICByb2xlQXJuOiAnSUFNLVJPTEUtQVJOJ1xuICAgICAgfSlcbiAgICB9O1xuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBFdmVudFJ1bGUoc3RhY2ssICdFdmVudFJ1bGUnLCB7XG4gICAgICB0YXJnZXRzOiBbIHQxIF0sXG4gICAgICBzY2hlZHVsZUV4cHJlc3Npb246ICdyYXRlKDUgbWludXRlcyknXG4gICAgfSk7XG5cbiAgICBydWxlLmFkZFRhcmdldCh0Miwge1xuICAgICAgdGV4dFRlbXBsYXRlOiAnVGhpcyBpcyA8YmxhPicsXG4gICAgICBwYXRoc01hcDoge1xuICAgICAgICBibGE6ICckLmRldGFpbC5ibGEnXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBleHBlY3Qoc3RhY2spLnRvTWF0Y2goe1xuICAgICAgXCJSZXNvdXJjZXNcIjoge1xuICAgICAgICBcIkV2ZW50UnVsZTVBNDkxRDJDXCI6IHtcbiAgICAgICAgXCJUeXBlXCI6IFwiQVdTOjpFdmVudHM6OlJ1bGVcIixcbiAgICAgICAgXCJQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIlNjaGVkdWxlRXhwcmVzc2lvblwiOiBcInJhdGUoNSBtaW51dGVzKVwiLFxuICAgICAgICAgIFwiU3RhdGVcIjogXCJFTkFCTEVEXCIsXG4gICAgICAgICAgXCJUYXJnZXRzXCI6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIkFyblwiOiBcIkFSTjFcIixcbiAgICAgICAgICAgIFwiSWRcIjogXCJUMVwiLFxuICAgICAgICAgICAgXCJLaW5lc2lzUGFyYW1ldGVyc1wiOiB7XG4gICAgICAgICAgICBcIlBhcnRpdGlvbktleVBhdGhcIjogXCJwYXJ0aXRpb25LZXlQYXRoXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiQXJuXCI6IFwiQVJOMlwiLFxuICAgICAgICAgICAgXCJJZFwiOiBcIlQyXCIsXG4gICAgICAgICAgICBcIklucHV0VHJhbnNmb3JtZXJcIjoge1xuICAgICAgICAgICAgXCJJbnB1dFBhdGhzTWFwXCI6IHtcbiAgICAgICAgICAgICAgXCJibGFcIjogXCIkLmRldGFpbC5ibGFcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiSW5wdXRUZW1wbGF0ZVwiOiBcIlxcXCJUaGlzIGlzIDxibGE+XFxcIlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJSb2xlQXJuXCI6IFwiSUFNLVJPTEUtQVJOXCJcbiAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnaW5wdXQgdGVtcGxhdGUgY2FuIGNvbnRhaW4gdG9rZW5zJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG4gICAgY29uc3QgdDE6IElFdmVudFJ1bGVUYXJnZXQgPSB7XG4gICAgICBhc0V2ZW50UnVsZVRhcmdldDogKCkgPT4gKHtcbiAgICAgICAgaWQ6ICdUMScsIGFybjogJ0FSTjEnLCBraW5lc2lzUGFyYW1ldGVyczogeyBwYXJ0aXRpb25LZXlQYXRoOiAncGFydGl0aW9uS2V5UGF0aCcgfVxuICAgICAgfSlcbiAgICB9O1xuXG4gICAgY29uc3QgdDI6IElFdmVudFJ1bGVUYXJnZXQgPSB7IGFzRXZlbnRSdWxlVGFyZ2V0OiAoKSA9PiAoeyBpZDogJ1QyJywgYXJuOiAnQVJOMicsIHJvbGVBcm46ICdJQU0tUk9MRS1BUk4nIH0pIH07XG4gICAgY29uc3QgdDM6IElFdmVudFJ1bGVUYXJnZXQgPSB7IGFzRXZlbnRSdWxlVGFyZ2V0OiAoKSA9PiAoeyBpZDogJ1QzJywgYXJuOiAnQVJOMycgfSkgfTtcbiAgICBjb25zdCB0NDogSUV2ZW50UnVsZVRhcmdldCA9IHsgYXNFdmVudFJ1bGVUYXJnZXQ6ICgpID0+ICh7IGlkOiAnVDQnLCBhcm46ICdBUk40JyB9KSB9O1xuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBFdmVudFJ1bGUoc3RhY2ssICdFdmVudFJ1bGUnLCB7IHNjaGVkdWxlRXhwcmVzc2lvbjogJ3JhdGUoMSBtaW51dGUpJyB9KTtcblxuICAgIC8vIGEgcGxhaW4gc3RyaW5nIHNob3VsZCBqdXN0IGJlIHN0cmluZ2lmaWVkIChpLmUuIGRvdWJsZSBxdW90ZXMgYWRkZWQgYW5kIGVzY2FwZWQpXG4gICAgcnVsZS5hZGRUYXJnZXQodDIsIHtcbiAgICAgIHRleHRUZW1wbGF0ZTogJ0hlbGxvLCBcIndvcmxkXCInXG4gICAgfSk7XG5cbiAgICAvLyB0b2tlbnMgYXJlIHVzZWQgaGVyZSAoRm5Db25jYXQpLCBidXQgdGhpcyBpcyBhIHRleHQgdGVtcGxhdGUgc28gd2VcbiAgICAvLyBleHBlY3QgaXQgdG8gYmUgd3JhcHBlZCBpbiBkb3VibGUgcXVvdGVzIGF1dG9tYXRpY2FsbHkgZm9yIHVzLlxuICAgIHJ1bGUuYWRkVGFyZ2V0KHQxLCB7XG4gICAgICB0ZXh0VGVtcGxhdGU6IGNkay5Gbi5qb2luKCcnLCBbICdhJywgJ2InIF0pLnRvU3RyaW5nKClcbiAgICB9KTtcblxuICAgIC8vIGpzb25UZW1wbGF0ZSBjYW4gYmUgdXNlZCB0byBmb3JtYXQgSlNPTiBkb2N1bWVudHMgd2l0aCByZXBsYWNlbWVudHNcbiAgICBydWxlLmFkZFRhcmdldCh0Mywge1xuICAgICAganNvblRlbXBsYXRlOiAneyBcImZvb1wiOiA8YmFyPiB9JyxcbiAgICAgIHBhdGhzTWFwOiB7XG4gICAgICAgIGJhcjogJyQuZGV0YWlsLmJhcidcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHRva2VucyBjYW4gYWxzbyB1c2VkIGZvciBKU09OIHRlbXBsYXRlcywgYnV0IHRoYXQgbWVhbnMgZXNjYXBpbmcgaXNcbiAgICAvLyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHVzZXIuXG4gICAgcnVsZS5hZGRUYXJnZXQodDQsIHtcbiAgICAgIGpzb25UZW1wbGF0ZTogY2RrLkZuLmpvaW4oJyAnLCBbJ1wiJywgJ2hlbGxvJywgJ1xcXCJ3b3JsZFxcXCInLCAnXCInXSksXG4gICAgfSk7XG5cbiAgICBleHBlY3Qoc3RhY2spLnRvTWF0Y2goe1xuICAgICAgXCJSZXNvdXJjZXNcIjoge1xuICAgICAgICBcIkV2ZW50UnVsZTVBNDkxRDJDXCI6IHtcbiAgICAgICAgXCJUeXBlXCI6IFwiQVdTOjpFdmVudHM6OlJ1bGVcIixcbiAgICAgICAgXCJQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIlN0YXRlXCI6IFwiRU5BQkxFRFwiLFxuICAgICAgICAgIFwiU2NoZWR1bGVFeHByZXNzaW9uXCI6IFwicmF0ZSgxIG1pbnV0ZSlcIixcbiAgICAgICAgICBcIlRhcmdldHNcIjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgXCJBcm5cIjogXCJBUk4yXCIsXG4gICAgICAgICAgICBcIklkXCI6IFwiVDJcIixcbiAgICAgICAgICAgIFwiSW5wdXRUcmFuc2Zvcm1lclwiOiB7XG4gICAgICAgICAgICAgIFwiSW5wdXRUZW1wbGF0ZVwiOiBcIlxcXCJIZWxsbywgXFxcXFxcXCJ3b3JsZFxcXFxcXFwiXFxcIlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJSb2xlQXJuXCI6IFwiSUFNLVJPTEUtQVJOXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICBcIkFyblwiOiBcIkFSTjFcIixcbiAgICAgICAgICAgIFwiSWRcIjogXCJUMVwiLFxuICAgICAgICAgICAgXCJJbnB1dFRyYW5zZm9ybWVyXCI6IHtcbiAgICAgICAgICAgICAgXCJJbnB1dFRlbXBsYXRlXCI6IFwiXFxcImFiXFxcIlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJLaW5lc2lzUGFyYW1ldGVyc1wiOiB7XG4gICAgICAgICAgICAgIFwiUGFydGl0aW9uS2V5UGF0aFwiOiBcInBhcnRpdGlvbktleVBhdGhcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiQXJuXCI6IFwiQVJOM1wiLFxuICAgICAgICAgICAgXCJJZFwiOiBcIlQzXCIsXG4gICAgICAgICAgICBcIklucHV0VHJhbnNmb3JtZXJcIjoge1xuICAgICAgICAgICAgICBcIklucHV0UGF0aHNNYXBcIjoge1xuICAgICAgICAgICAgICBcImJhclwiOiBcIiQuZGV0YWlsLmJhclwiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiSW5wdXRUZW1wbGF0ZVwiOiBcInsgXFxcImZvb1xcXCI6IDxiYXI+IH1cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiQXJuXCI6IFwiQVJONFwiLFxuICAgICAgICAgICAgXCJJZFwiOiBcIlQ0XCIsXG4gICAgICAgICAgICBcIklucHV0VHJhbnNmb3JtZXJcIjoge1xuICAgICAgICAgICAgICBcIklucHV0VGVtcGxhdGVcIjogXCJcXFwiIGhlbGxvIFxcXCJ3b3JsZFxcXCIgXFxcIlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdhc0V2ZW50UnVsZVRhcmdldCBjYW4gdXNlIHRoZSBydWxlQXJuIGFuZCBhIHVuaXF1ZUlkIG9mIHRoZSBydWxlJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgICBsZXQgcmVjZWl2ZWRSdWxlQXJuID0gJ0ZBSUwnO1xuICAgIGxldCByZWNlaXZlZFJ1bGVJZCA9ICdGQUlMJztcblxuICAgIGNvbnN0IHQxOiBJRXZlbnRSdWxlVGFyZ2V0ID0ge1xuICAgICAgYXNFdmVudFJ1bGVUYXJnZXQ6IChydWxlQXJuOiBzdHJpbmcsIHJ1bGVJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJlY2VpdmVkUnVsZUFybiA9IHJ1bGVBcm47XG4gICAgICAgIHJlY2VpdmVkUnVsZUlkID0gcnVsZUlkO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6ICdUMScsXG4gICAgICAgICAgYXJuOiAnQVJOMScsXG4gICAgICAgICAga2luZXNpc1BhcmFtZXRlcnM6IHsgcGFydGl0aW9uS2V5UGF0aDogJ3BhcnRpdGlvbktleVBhdGgnIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBFdmVudFJ1bGUoc3RhY2ssICdFdmVudFJ1bGUnKTtcbiAgICBydWxlLmFkZFRhcmdldCh0MSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay5ub2RlLnJlc29sdmUocmVjZWl2ZWRSdWxlQXJuKSwgc3RhY2subm9kZS5yZXNvbHZlKHJ1bGUucnVsZUFybikpO1xuICAgIHRlc3QuZGVlcEVxdWFsKHJlY2VpdmVkUnVsZUlkLCBydWxlLm5vZGUudW5pcXVlSWQpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdpbXBvcnQvZXhwb3J0IHJ1bGUnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgY29uc3QgbXlSdWxlID0gbmV3IEV2ZW50UnVsZShzdGFjaywgJ015UnVsZScpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGV4cG9ydGVkUnVsZSA9IG15UnVsZS5leHBvcnQoKTtcbiAgICBjb25zdCBpbXBvcnRlZFJ1bGUgPSBFdmVudFJ1bGUuZnJvbUV2ZW50UnVsZUFybihzdGFjaywgJ0ltcG9ydGVkUnVsZScsICdhcm46b2Y6cnVsZScpO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QuZGVlcEVxdWFsKHN0YWNrLm5vZGUucmVzb2x2ZShleHBvcnRlZFJ1bGUpLCB7IGV2ZW50UnVsZUFybjogeyAnRm46OkltcG9ydFZhbHVlJzogJ1N0YWNrOk15UnVsZVJ1bGVBcm5EQjEzQURCMScgfSB9KTtcbiAgICB0ZXN0LmRlZXBFcXVhbChpbXBvcnRlZFJ1bGUucnVsZUFybiwgJ2FybjpvZjpydWxlJyk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnanNvbiB0ZW1wbGF0ZSc6IHtcbiAgICAnY2FuIGp1c3QgYmUgYSBKU09OIG9iamVjdCcodGVzdDogVGVzdCkge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICBjb25zdCBydWxlID0gbmV3IEV2ZW50UnVsZShzdGFjaywgJ1J1bGUnLCB7XG4gICAgICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogJ3JhdGUoMSBtaW51dGUpJ1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyBTb21lVGFyZ2V0KCksIHtcbiAgICAgICAganNvblRlbXBsYXRlOiB7IFNvbWVPYmplY3Q6ICd3aXRoQVZhbHVlJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlTGlrZSgnQVdTOjpFdmVudHM6OlJ1bGUnLCB7XG4gICAgICAgIFRhcmdldHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBJbnB1dFRyYW5zZm9ybWVyOiB7XG4gICAgICAgICAgICAgIElucHV0VGVtcGxhdGU6IFwie1xcXCJTb21lT2JqZWN0XFxcIjpcXFwid2l0aEFWYWx1ZVxcXCJ9XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KSk7XG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuICB9LFxuXG4gICd0ZXh0IHRlbXBsYXRlcyc6IHtcbiAgICAnc3RyaW5ncyB3aXRoIG5ld2xpbmVzIGFyZSBzZXJpYWxpemVkIHRvIGEgbmV3bGluZS1kZWxpbWl0ZWQgbGlzdCBvZiBKU09OIHN0cmluZ3MnKHRlc3Q6IFRlc3QpIHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgICAgY29uc3QgcnVsZSA9IG5ldyBFdmVudFJ1bGUoc3RhY2ssICdSdWxlJywge1xuICAgICAgICBzY2hlZHVsZUV4cHJlc3Npb246ICdyYXRlKDEgbWludXRlKSdcbiAgICAgIH0pO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBydWxlLmFkZFRhcmdldChuZXcgU29tZVRhcmdldCgpLCB7XG4gICAgICAgIHRleHRUZW1wbGF0ZTogJ0kgaGF2ZVxcbm11bHRpcGxlIGxpbmVzJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6RXZlbnRzOjpSdWxlJywge1xuICAgICAgICBUYXJnZXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgSW5wdXRUcmFuc2Zvcm1lcjoge1xuICAgICAgICAgICAgICBJbnB1dFRlbXBsYXRlOiBcIlxcXCJJIGhhdmVcXFwiXFxuXFxcIm11bHRpcGxlIGxpbmVzXFxcIlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSkpO1xuXG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2VzY2FwZWQgbmV3bGluZXMgYXJlIG5vdCBpbnRlcnByZXRlZCBhcyBuZXdsaW5lcycodGVzdDogVGVzdCkge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgICBjb25zdCBydWxlID0gbmV3IEV2ZW50UnVsZShzdGFjaywgJ1J1bGUnLCB7XG4gICAgICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogJ3JhdGUoMSBtaW51dGUpJ1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyBTb21lVGFyZ2V0KCksIHtcbiAgICAgICAgdGV4dFRlbXBsYXRlOiAndGhpcyBpcyBub3RcXFxcbmEgcmVhbCBuZXdsaW5lJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6RXZlbnRzOjpSdWxlJywge1xuICAgICAgICBUYXJnZXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgSW5wdXRUcmFuc2Zvcm1lcjoge1xuICAgICAgICAgICAgICBJbnB1dFRlbXBsYXRlOiBcIlxcXCJ0aGlzIGlzIG5vdFxcXFxcXFxcbmEgcmVhbCBuZXdsaW5lXFxcIlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSkpO1xuXG4gICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJ2NhbiB1c2UgVG9rZW5zIGluIHRleHQgdGVtcGxhdGVzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICAgIGNvbnN0IHJ1bGUgPSBuZXcgRXZlbnRSdWxlKHN0YWNrLCAnUnVsZScsIHtcbiAgICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiAncmF0ZSgxIG1pbnV0ZSknXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgd29ybGQgPSBuZXcgY2RrLlRva2VuKCgpID0+ICd3b3JsZCcpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBydWxlLmFkZFRhcmdldChuZXcgU29tZVRhcmdldCgpLCB7XG4gICAgICAgIHRleHRUZW1wbGF0ZTogYGhlbGxvICR7d29ybGR9YCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6RXZlbnRzOjpSdWxlJywge1xuICAgICAgICBUYXJnZXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgSW5wdXRUcmFuc2Zvcm1lcjoge1xuICAgICAgICAgICAgICBJbnB1dFRlbXBsYXRlOiBcIlxcXCJoZWxsbyB3b3JsZFxcXCJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pKTtcblxuICAgICAgdGVzdC5kb25lKCk7XG4gICAgfVxuICB9LFxuXG4gICdydWxlIGNhbiBiZSBkaXNhYmxlZCcodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgbmV3IEV2ZW50UnVsZShzdGFjaywgJ1J1bGUnLCB7XG4gICAgICBzY2hlZHVsZUV4cHJlc3Npb246ICdmb29tJyxcbiAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0YWNrKS50byhoYXZlUmVzb3VyY2UoJ0FXUzo6RXZlbnRzOjpSdWxlJywge1xuICAgICAgXCJTdGF0ZVwiOiBcIkRJU0FCTEVEXCJcbiAgICB9KSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnZmFpbHMgaWYgbXVsdGlwbGUgdGFyZ2V0cyB3aXRoIHRoZSBzYW1lIGlkIGFyZSBhZGRlZCcodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG4gICAgY29uc3QgcnVsZSA9IG5ldyBFdmVudFJ1bGUoc3RhY2ssICdSdWxlJywge1xuICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiAnZm9vbScsXG4gICAgICBlbmFibGVkOiBmYWxzZVxuICAgIH0pO1xuICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyBTb21lVGFyZ2V0KCkpO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QudGhyb3dzKCgpID0+IHJ1bGUuYWRkVGFyZ2V0KG5ldyBTb21lVGFyZ2V0KCkpLCAvRHVwbGljYXRlIGV2ZW50IHJ1bGUgdGFyZ2V0IHdpdGggSUQvKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfVxufTtcblxuY2xhc3MgU29tZVRhcmdldCBpbXBsZW1lbnRzIElFdmVudFJ1bGVUYXJnZXQge1xuICBwdWJsaWMgYXNFdmVudFJ1bGVUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiAnVDEnLCBhcm46ICdBUk4xJywga2luZXNpc1BhcmFtZXRlcnM6IHsgcGFydGl0aW9uS2V5UGF0aDogJ3BhcnRpdGlvbktleVBhdGgnIH1cbiAgICB9O1xuICB9XG59Il19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5ydWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0Q0FBeUU7QUFDekUsd0NBQXlDO0FBQ3pDLDhDQUFvRDtBQUNwRCxvQ0FBcUM7QUFDckMsc0NBQXFDO0FBRXJDLGdDQUF5RTtBQUN6RSxzQ0FBbUM7QUEwWW5DLE1BQU0sVUFBVTtJQUNQLElBQUk7UUFDVCxPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUU7U0FDbkYsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTVZRCxpQkFBUztJQUNQLGNBQWMsQ0FBQyxJQUFVO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTlCLElBQUksV0FBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDeEIsa0JBQWtCLEVBQUUsa0JBQWtCO1NBQ3ZDLENBQUMsQ0FBQztRQUVILGVBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDcEIsV0FBVyxFQUFFO2dCQUNYLGdCQUFnQixFQUFFO29CQUNsQixNQUFNLEVBQUUsbUJBQW1CO29CQUMzQixZQUFZLEVBQUU7d0JBQ1osb0JBQW9CLEVBQUUsa0JBQWtCO3dCQUN4QyxPQUFPLEVBQUUsU0FBUztxQkFDbkI7aUJBQ0E7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxJQUFVO1FBQ2xDLFFBQVE7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU5QixPQUFPO1FBQ1AsSUFBSSxXQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUMxQixRQUFRLEVBQUUsY0FBYztZQUN4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QUFhLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBVTtRQUMvQixRQUFRO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFOUIsT0FBTztRQUNQLElBQUksV0FBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDdEIsa0JBQWtCLEVBQUUsTUFBTTtZQUMxQixPQUFPLEVBQUUsS0FBSztTQUNmLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxlQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFZLENBQUMsbUJBQW1CLEVBQUU7WUFDakQsT0FBTyxFQUFFLFVBQVU7U0FDcEIsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsc0RBQXNELENBQUMsSUFBVTtRQUMvRCxRQUFRO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUNuQyxrQkFBa0IsRUFBRSxNQUFNO1lBQzFCLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFakMsT0FBTztRQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDLEVBQUUscUNBQXFDLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4cGVjdCwgaGF2ZVJlc291cmNlLCBoYXZlUmVzb3VyY2VMaWtlIH0gZnJvbSAnQGF3cy1jZGsvYXNzZXJ0JztcbmltcG9ydCBpYW0gPSByZXF1aXJlKCdAYXdzLWNkay9hd3MtaWFtJyk7XG5pbXBvcnQgeyBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSAnQGF3cy1jZGsvYXdzLWlhbSc7XG5pbXBvcnQgY2RrID0gcmVxdWlyZSgnQGF3cy1jZGsvY2RrJyk7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gJ0Bhd3MtY2RrL2Nkayc7XG5pbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHsgRXZlbnRGaWVsZCwgSVJ1bGUsIElSdWxlVGFyZ2V0LCBSdWxlVGFyZ2V0SW5wdXQgfSBmcm9tICcuLi9saWInO1xuaW1wb3J0IHsgUnVsZSB9IGZyb20gJy4uL2xpYi9ydWxlJztcblxuLy8gdHNsaW50OmRpc2FibGU6b2JqZWN0LWxpdGVyYWwta2V5LXF1b3Rlc1xuXG5leHBvcnQgPSB7XG4gICdkZWZhdWx0IHJ1bGUnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICAgIG5ldyBSdWxlKHN0YWNrLCAnTXlSdWxlJywge1xuICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiAncmF0ZSgxMCBtaW51dGVzKSdcbiAgICB9KTtcblxuICAgIGV4cGVjdChzdGFjaykudG9NYXRjaCh7XG4gICAgICBcIlJlc291cmNlc1wiOiB7XG4gICAgICAgIFwiTXlSdWxlQTQ0QUI4MzFcIjoge1xuICAgICAgICBcIlR5cGVcIjogXCJBV1M6OkV2ZW50czo6UnVsZVwiLFxuICAgICAgICBcIlByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiU2NoZWR1bGVFeHByZXNzaW9uXCI6IFwicmF0ZSgxMCBtaW51dGVzKVwiLFxuICAgICAgICAgIFwiU3RhdGVcIjogXCJFTkFCTEVEXCJcbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3J1bGUgd2l0aCBwaHlzaWNhbCBuYW1lJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICAgIC8vIFdIRU5cbiAgICBuZXcgUnVsZShzdGFjaywgJ015UnVsZScsIHtcbiAgICBydWxlTmFtZTogJ1BoeXNpY2FsTmFtZScsXG4gICAgc2NoZWR1bGVFeHByZXNzaW9uOiAncmF0ZSgxMCBtaW51dGVzKSdcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnQVdTOjpFdmVudHM6OlJ1bGUnLCB7XG4gICAgTmFtZTogJ1BoeXNpY2FsTmFtZSdcbiAgICB9KSk7XG5cbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnZXZlbnRQYXR0ZXJuIGlzIHJlbmRlcmVkIHByb3Blcmx5Jyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgICBuZXcgUnVsZShzdGFjaywgJ015UnVsZScsIHtcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICBhY2NvdW50OiBbICdhY2NvdW50MScsICdhY2NvdW50MicgXSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgZm9vOiBbIDEsIDIgXSxcbiAgICAgICAgfSxcbiAgICAgICAgZGV0YWlsVHlwZTogWyAnZGV0YWlsVHlwZTEnIF0sXG4gICAgICAgIGlkOiBbICdpZDEnLCAnaWQyJyBdLFxuICAgICAgICByZWdpb246IFsgJ3JlZ2lvbjEnLCAncmVnaW9uMicsICdyZWdpb24zJyBdLFxuICAgICAgICByZXNvdXJjZXM6IFsgJ3IxJyBdLFxuICAgICAgICBzb3VyY2U6IFsgJ3NyYzEnLCAnc3JjMicgXSxcbiAgICAgICAgdGltZTogWyAndDEnIF0sXG4gICAgICAgIHZlcnNpb246IFsgJzAnIF1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGV4cGVjdChzdGFjaykudG9NYXRjaCh7XG4gICAgICBcIlJlc291cmNlc1wiOiB7XG4gICAgICAgIFwiTXlSdWxlQTQ0QUI4MzFcIjoge1xuICAgICAgICBcIlR5cGVcIjogXCJBV1M6OkV2ZW50czo6UnVsZVwiLFxuICAgICAgICBcIlByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiRXZlbnRQYXR0ZXJuXCI6IHtcbiAgICAgICAgICAgIGFjY291bnQ6IFsgJ2FjY291bnQxJywgJ2FjY291bnQyJyBdLFxuICAgICAgICAgICAgZGV0YWlsOiB7IGZvbzogWyAxLCAyIF0gfSxcbiAgICAgICAgICAgICdkZXRhaWwtdHlwZSc6IFsgJ2RldGFpbFR5cGUxJyBdLFxuICAgICAgICAgICAgaWQ6IFsgJ2lkMScsICdpZDInIF0sXG4gICAgICAgICAgICByZWdpb246IFsgJ3JlZ2lvbjEnLCAncmVnaW9uMicsICdyZWdpb24zJyBdLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbICdyMScgXSxcbiAgICAgICAgICAgIHNvdXJjZTogWyAnc3JjMScsICdzcmMyJyBdLFxuICAgICAgICAgICAgdGltZTogWyAndDEnIF0sXG4gICAgICAgICAgICB2ZXJzaW9uOiBbICcwJyBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIlN0YXRlXCI6IFwiRU5BQkxFRFwiXG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2ZhaWxzIHN5bnRoZXNpcyBpZiBuZWl0aGVyIGV2ZW50UGF0dGVybiBub3Igc2NoZXVkbGVFeHByZXNzaW9uIGFyZSBzcGVjaWZpZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBhcHAgPSBuZXcgY2RrLkFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayhhcHAsICdNeVN0YWNrJyk7XG4gICAgbmV3IFJ1bGUoc3RhY2ssICdSdWxlJyk7XG4gICAgdGVzdC50aHJvd3MoKCkgPT4gYXBwLnN5bnRoZXNpemVTdGFjayhzdGFjay5uYW1lKSwgL0VpdGhlciAnZXZlbnRQYXR0ZXJuJyBvciAnc2NoZWR1bGVFeHByZXNzaW9uJyBtdXN0IGJlIGRlZmluZWQvKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnYWRkRXZlbnRQYXR0ZXJuIGNhbiBiZSB1c2VkIHRvIGFkZCBmaWx0ZXJzJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUoc3RhY2ssICdNeVJ1bGUnKTtcbiAgICBydWxlLmFkZEV2ZW50UGF0dGVybih7XG4gICAgICBhY2NvdW50OiBbICcxMjM0NScgXSxcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBmb286IFsgJ2hlbGxvJyBdXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBydWxlLmFkZEV2ZW50UGF0dGVybih7XG4gICAgICBzb3VyY2U6IFsgJ2F3cy5zb3VyY2UnIF0sXG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgZm9vOiBbICdiYXInIF0sXG4gICAgICAgIGdvbzoge1xuICAgICAgICAgIGhlbGxvOiBbICd3b3JsZCcgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBleHBlY3Qoc3RhY2spLnRvTWF0Y2goe1xuICAgICAgXCJSZXNvdXJjZXNcIjoge1xuICAgICAgICBcIk15UnVsZUE0NEFCODMxXCI6IHtcbiAgICAgICAgXCJUeXBlXCI6IFwiQVdTOjpFdmVudHM6OlJ1bGVcIixcbiAgICAgICAgXCJQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIkV2ZW50UGF0dGVyblwiOiB7XG4gICAgICAgICAgXCJhY2NvdW50XCI6IFtcbiAgICAgICAgICAgIFwiMTIzNDVcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJkZXRhaWxcIjoge1xuICAgICAgICAgICAgXCJmb29cIjogW1xuICAgICAgICAgICAgXCJoZWxsb1wiLFxuICAgICAgICAgICAgXCJiYXJcIlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiZ29vXCI6IHtcbiAgICAgICAgICAgIFwiaGVsbG9cIjogW1xuICAgICAgICAgICAgICBcIndvcmxkXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic291cmNlXCI6IFtcbiAgICAgICAgICAgIFwiYXdzLnNvdXJjZVwiXG4gICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJTdGF0ZVwiOiBcIkVOQUJMRURcIlxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAndGFyZ2V0cyBjYW4gYmUgYWRkZWQgdmlhIHByb3BzIG9yIGFkZFRhcmdldCB3aXRoIGlucHV0IHRyYW5zZm9ybWVyJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG4gICAgY29uc3QgdDE6IElSdWxlVGFyZ2V0ID0ge1xuICAgICAgYmluZDogKCkgPT4gKHtcbiAgICAgICAgaWQ6ICdUMScsXG4gICAgICAgIGFybjogJ0FSTjEnLFxuICAgICAgICBraW5lc2lzUGFyYW1ldGVyczogeyBwYXJ0aXRpb25LZXlQYXRoOiAncGFydGl0aW9uS2V5UGF0aCcgfVxuICAgICAgfSlcbiAgICB9O1xuXG4gICAgY29uc3QgdDI6IElSdWxlVGFyZ2V0ID0ge1xuICAgICAgYmluZDogKCkgPT4gKHtcbiAgICAgICAgaWQ6ICdUMicsXG4gICAgICAgIGFybjogJ0FSTjInLFxuICAgICAgICBpbnB1dDogUnVsZVRhcmdldElucHV0LmZyb21UZXh0KGBUaGlzIGlzICR7RXZlbnRGaWVsZC5mcm9tUGF0aCgnJC5kZXRhaWwuYmxhJywgJ2JsYScpfWApLFxuICAgICAgfSlcbiAgICB9O1xuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKHN0YWNrLCAnRXZlbnRSdWxlJywge1xuICAgICAgdGFyZ2V0czogWyB0MSBdLFxuICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiAncmF0ZSg1IG1pbnV0ZXMpJ1xuICAgIH0pO1xuXG4gICAgcnVsZS5hZGRUYXJnZXQodDIpO1xuXG4gICAgZXhwZWN0KHN0YWNrKS50b01hdGNoKHtcbiAgICAgIFwiUmVzb3VyY2VzXCI6IHtcbiAgICAgICAgXCJFdmVudFJ1bGU1QTQ5MUQyQ1wiOiB7XG4gICAgICAgIFwiVHlwZVwiOiBcIkFXUzo6RXZlbnRzOjpSdWxlXCIsXG4gICAgICAgIFwiUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJTY2hlZHVsZUV4cHJlc3Npb25cIjogXCJyYXRlKDUgbWludXRlcylcIixcbiAgICAgICAgICBcIlN0YXRlXCI6IFwiRU5BQkxFRFwiLFxuICAgICAgICAgIFwiVGFyZ2V0c1wiOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJBcm5cIjogXCJBUk4xXCIsXG4gICAgICAgICAgICBcIklkXCI6IFwiVDFcIixcbiAgICAgICAgICAgIFwiS2luZXNpc1BhcmFtZXRlcnNcIjoge1xuICAgICAgICAgICAgXCJQYXJ0aXRpb25LZXlQYXRoXCI6IFwicGFydGl0aW9uS2V5UGF0aFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIkFyblwiOiBcIkFSTjJcIixcbiAgICAgICAgICAgIFwiSWRcIjogXCJUMlwiLFxuICAgICAgICAgICAgXCJJbnB1dFRyYW5zZm9ybWVyXCI6IHtcbiAgICAgICAgICAgIFwiSW5wdXRQYXRoc01hcFwiOiB7XG4gICAgICAgICAgICAgIFwiYmxhXCI6IFwiJC5kZXRhaWwuYmxhXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIklucHV0VGVtcGxhdGVcIjogXCJcXFwiVGhpcyBpcyA8YmxhPlxcXCJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAnaW5wdXQgdGVtcGxhdGUgY2FuIGNvbnRhaW4gdG9rZW5zJyh0ZXN0OiBUZXN0KSB7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUoc3RhY2ssICdFdmVudFJ1bGUnLCB7IHNjaGVkdWxlRXhwcmVzc2lvbjogJ3JhdGUoMSBtaW51dGUpJyB9KTtcblxuICAgIC8vIGEgcGxhaW4gc3RyaW5nIHNob3VsZCBqdXN0IGJlIHN0cmluZ2lmaWVkIChpLmUuIGRvdWJsZSBxdW90ZXMgYWRkZWQgYW5kIGVzY2FwZWQpXG4gICAgcnVsZS5hZGRUYXJnZXQoe1xuICAgICAgYmluZDogKCkgPT4gKHtcbiAgICAgICAgaWQ6ICdUMicsIGFybjogJ0FSTjInLCBpbnB1dDogUnVsZVRhcmdldElucHV0LmZyb21UZXh0KCdIZWxsbywgXCJ3b3JsZFwiJylcbiAgICAgIH0pXG4gICAgfSk7XG5cbiAgICAvLyB0b2tlbnMgYXJlIHVzZWQgaGVyZSAoRm5Db25jYXQpLCBidXQgdGhpcyBpcyBhIHRleHQgdGVtcGxhdGUgc28gd2VcbiAgICAvLyBleHBlY3QgaXQgdG8gYmUgd3JhcHBlZCBpbiBkb3VibGUgcXVvdGVzIGF1dG9tYXRpY2FsbHkgZm9yIHVzLlxuICAgIHJ1bGUuYWRkVGFyZ2V0KHtcbiAgICAgIGJpbmQ6ICgpID0+ICh7XG4gICAgICAgIGlkOiAnVDEnLCBhcm46ICdBUk4xJywga2luZXNpc1BhcmFtZXRlcnM6IHsgcGFydGl0aW9uS2V5UGF0aDogJ3BhcnRpdGlvbktleVBhdGgnIH0sXG4gICAgICAgIGlucHV0OiBSdWxlVGFyZ2V0SW5wdXQuZnJvbVRleHQoY2RrLkZuLmpvaW4oJycsIFsgJ2EnLCAnYicgXSkudG9TdHJpbmcoKSksXG4gICAgICB9KVxuICAgIH0pO1xuXG4gICAgLy8ganNvblRlbXBsYXRlIGNhbiBiZSB1c2VkIHRvIGZvcm1hdCBKU09OIGRvY3VtZW50cyB3aXRoIHJlcGxhY2VtZW50c1xuICAgIHJ1bGUuYWRkVGFyZ2V0KHtcbiAgICAgIGJpbmQ6ICgpID0+ICh7XG4gICAgICAgIGlkOiAnVDMnLCBhcm46ICdBUk4zJyxcbiAgICAgICAgaW5wdXQ6IFJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHsgZm9vOiBFdmVudEZpZWxkLmZyb21QYXRoKCckLmRldGFpbC5iYXInKSB9KSxcbiAgICAgIH0pXG4gICAgfSk7XG5cbiAgICAvLyB0b2tlbnMgY2FuIGFsc28gdXNlZCBmb3IgSlNPTiB0ZW1wbGF0ZXMuXG4gICAgcnVsZS5hZGRUYXJnZXQoe1xuICAgICAgYmluZDogKCkgPT4gKHtcbiAgICAgICAgaWQ6ICdUNCcsIGFybjogJ0FSTjQnLFxuICAgICAgICBpbnB1dDogUnVsZVRhcmdldElucHV0LmZyb21UZXh0KGNkay5Gbi5qb2luKCcgJywgWydoZWxsbycsICdcIndvcmxkXCInXSkudG9TdHJpbmcoKSksXG4gICAgICB9KVxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHN0YWNrKS50b01hdGNoKHtcbiAgICAgIFwiUmVzb3VyY2VzXCI6IHtcbiAgICAgICAgXCJFdmVudFJ1bGU1QTQ5MUQyQ1wiOiB7XG4gICAgICAgIFwiVHlwZVwiOiBcIkFXUzo6RXZlbnRzOjpSdWxlXCIsXG4gICAgICAgIFwiUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJTdGF0ZVwiOiBcIkVOQUJMRURcIixcbiAgICAgICAgICBcIlNjaGVkdWxlRXhwcmVzc2lvblwiOiBcInJhdGUoMSBtaW51dGUpXCIsXG4gICAgICAgICAgXCJUYXJnZXRzXCI6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJBcm5cIjogXCJBUk4yXCIsXG4gICAgICAgICAgICAgIFwiSWRcIjogXCJUMlwiLFxuICAgICAgICAgICAgICBcIklucHV0XCI6ICdcIkhlbGxvLCBcXFxcXCJ3b3JsZFxcXFxcIlwiJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiQXJuXCI6IFwiQVJOMVwiLFxuICAgICAgICAgICAgICBcIklkXCI6IFwiVDFcIixcbiAgICAgICAgICAgICAgXCJJbnB1dFwiOiBcIlxcXCJhYlxcXCJcIixcbiAgICAgICAgICAgICAgXCJLaW5lc2lzUGFyYW1ldGVyc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJQYXJ0aXRpb25LZXlQYXRoXCI6IFwicGFydGl0aW9uS2V5UGF0aFwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiQXJuXCI6IFwiQVJOM1wiLFxuICAgICAgICAgICAgICBcIklkXCI6IFwiVDNcIixcbiAgICAgICAgICAgICAgXCJJbnB1dFRyYW5zZm9ybWVyXCI6IHtcbiAgICAgICAgICAgICAgICBcIklucHV0UGF0aHNNYXBcIjoge1xuICAgICAgICAgICAgICAgICAgXCJmMVwiOiBcIiQuZGV0YWlsLmJhclwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIklucHV0VGVtcGxhdGVcIjogXCJ7XFxcImZvb1xcXCI6PGYxPn1cIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIkFyblwiOiBcIkFSTjRcIixcbiAgICAgICAgICAgICAgXCJJZFwiOiBcIlQ0XCIsXG4gICAgICAgICAgICAgIFwiSW5wdXRcIjogJ1wiaGVsbG8gXFxcXFwid29ybGRcXFxcXCJcIidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ3RhcmdldCBjYW4gZGVjbGFyZSByb2xlIHdoaWNoIHdpbGwgYmUgdXNlZCcodGVzdDogVGVzdCkge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUoc3RhY2ssICdFdmVudFJ1bGUnLCB7IHNjaGVkdWxlRXhwcmVzc2lvbjogJ3JhdGUoMSBtaW51dGUpJyB9KTtcblxuICAgIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUoc3RhY2ssICdTb21lUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ25vYm9keScpXG4gICAgfSk7XG5cbiAgICAvLyBhIHBsYWluIHN0cmluZyBzaG91bGQganVzdCBiZSBzdHJpbmdpZmllZCAoaS5lLiBkb3VibGUgcXVvdGVzIGFkZGVkIGFuZCBlc2NhcGVkKVxuICAgIHJ1bGUuYWRkVGFyZ2V0KHtcbiAgICAgIGJpbmQ6ICgpID0+ICh7XG4gICAgICAgIGlkOiAnVDInLFxuICAgICAgICBhcm46ICdBUk4yJyxcbiAgICAgICAgcm9sZSxcbiAgICAgIH0pXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0YWNrKS50byhoYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkV2ZW50czo6UnVsZScsIHtcbiAgICAgIFwiVGFyZ2V0c1wiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcIkFyblwiOiBcIkFSTjJcIixcbiAgICAgICAgICBcIklkXCI6IFwiVDJcIixcbiAgICAgICAgICBcIlJvbGVBcm5cIjoge1wiRm46OkdldEF0dFwiOiBbXCJTb21lUm9sZTZEREM1NEREXCIsIFwiQXJuXCJdfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSkpO1xuXG4gICAgdGVzdC5kb25lKCk7XG4gIH0sXG5cbiAgJ2FzRXZlbnRSdWxlVGFyZ2V0IGNhbiB1c2UgdGhlIHJ1bGVBcm4gYW5kIGEgdW5pcXVlSWQgb2YgdGhlIHJ1bGUnKHRlc3Q6IFRlc3QpIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICAgIGxldCByZWNlaXZlZFJ1bGVBcm4gPSAnRkFJTCc7XG4gICAgbGV0IHJlY2VpdmVkUnVsZUlkID0gJ0ZBSUwnO1xuXG4gICAgY29uc3QgdDE6IElSdWxlVGFyZ2V0ID0ge1xuICAgICAgYmluZDogKGV2ZW50UnVsZTogSVJ1bGUpID0+IHtcbiAgICAgICAgcmVjZWl2ZWRSdWxlQXJuID0gZXZlbnRSdWxlLnJ1bGVBcm47XG4gICAgICAgIHJlY2VpdmVkUnVsZUlkID0gZXZlbnRSdWxlLm5vZGUudW5pcXVlSWQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogJ1QxJyxcbiAgICAgICAgICBhcm46ICdBUk4xJyxcbiAgICAgICAgICBraW5lc2lzUGFyYW1ldGVyczogeyBwYXJ0aXRpb25LZXlQYXRoOiAncGFydGl0aW9uS2V5UGF0aCcgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUoc3RhY2ssICdFdmVudFJ1bGUnKTtcbiAgICBydWxlLmFkZFRhcmdldCh0MSk7XG5cbiAgICB0ZXN0LmRlZXBFcXVhbChzdGFjay5ub2RlLnJlc29sdmUocmVjZWl2ZWRSdWxlQXJuKSwgc3RhY2subm9kZS5yZXNvbHZlKHJ1bGUucnVsZUFybikpO1xuICAgIHRlc3QuZGVlcEVxdWFsKHJlY2VpdmVkUnVsZUlkLCBydWxlLm5vZGUudW5pcXVlSWQpO1xuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdmcm9tRXZlbnRSdWxlQXJuJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IGltcG9ydGVkUnVsZSA9IFJ1bGUuZnJvbUV2ZW50UnVsZUFybihzdGFjaywgJ0ltcG9ydGVkUnVsZScsICdhcm46b2Y6cnVsZScpO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QuZGVlcEVxdWFsKGltcG9ydGVkUnVsZS5ydWxlQXJuLCAnYXJuOm9mOnJ1bGUnKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfSxcblxuICAncnVsZSBjYW4gYmUgZGlzYWJsZWQnKHRlc3Q6IFRlc3QpIHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gICAgLy8gV0hFTlxuICAgIG5ldyBSdWxlKHN0YWNrLCAnUnVsZScsIHtcbiAgICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogJ2Zvb20nLFxuICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnQVdTOjpFdmVudHM6OlJ1bGUnLCB7XG4gICAgICBcIlN0YXRlXCI6IFwiRElTQUJMRURcIlxuICAgIH0pKTtcblxuICAgIHRlc3QuZG9uZSgpO1xuICB9LFxuXG4gICdmYWlscyBpZiBtdWx0aXBsZSB0YXJnZXRzIHdpdGggdGhlIHNhbWUgaWQgYXJlIGFkZGVkJyh0ZXN0OiBUZXN0KSB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcbiAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUoc3RhY2ssICdSdWxlJywge1xuICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiAnZm9vbScsXG4gICAgICBlbmFibGVkOiBmYWxzZVxuICAgIH0pO1xuICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyBTb21lVGFyZ2V0KCkpO1xuXG4gICAgLy8gVEhFTlxuICAgIHRlc3QudGhyb3dzKCgpID0+IHJ1bGUuYWRkVGFyZ2V0KG5ldyBTb21lVGFyZ2V0KCkpLCAvRHVwbGljYXRlIGV2ZW50IHJ1bGUgdGFyZ2V0IHdpdGggSUQvKTtcbiAgICB0ZXN0LmRvbmUoKTtcbiAgfVxufTtcblxuY2xhc3MgU29tZVRhcmdldCBpbXBsZW1lbnRzIElSdWxlVGFyZ2V0IHtcbiAgcHVibGljIGJpbmQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiAnVDEnLCBhcm46ICdBUk4xJywga2luZXNpc1BhcmFtZXRlcnM6IHsgcGFydGl0aW9uS2V5UGF0aDogJ3BhcnRpdGlvbktleVBhdGgnIH1cbiAgICB9O1xuICB9XG59Il19

@@ -45,2 +45,8 @@ {

"path": "../assert"
},
{
"path": "../../../tools/cdk-build-tools"
},
{
"path": "../../../tools/pkglint"
}

@@ -47,0 +53,0 @@ ],

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc