codepipeline-event-notifier 0.2.8 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +12 -0
- package/.jsii +148 -14
- package/API.md +110 -2
- package/README.md +51 -6
- package/assets/funcs/notifier.lambda/index.js +152 -0
- package/assets/funcs/notifier.lambda/index.js.map +3 -3
- package/lib/constructs/codepipeline-event-notifier.d.ts +35 -1
- package/lib/constructs/codepipeline-event-notifier.js +80 -5
- package/lib/funcs/notifier.lambda.d.ts +1 -1
- package/lib/funcs/notifier.lambda.js +28 -2
- package/lib/funcs/target-pipeline-predicates.d.ts +99 -0
- package/lib/funcs/target-pipeline-predicates.js +212 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/stacks/codepipeline-event-notify-stack.js +11 -2
- package/package.json +5 -4
|
@@ -5,6 +5,7 @@ const client_codepipeline_1 = require("@aws-sdk/client-codepipeline");
|
|
|
5
5
|
const client_sns_1 = require("@aws-sdk/client-sns");
|
|
6
6
|
const strict_env_resolver_1 = require("strict-env-resolver");
|
|
7
7
|
const notifier_predicates_1 = require("./notifier-predicates");
|
|
8
|
+
const target_pipeline_predicates_1 = require("./target-pipeline-predicates");
|
|
8
9
|
/**
|
|
9
10
|
* SNS client used to publish notifications.
|
|
10
11
|
*/
|
|
@@ -79,9 +80,31 @@ const waitPipelineExecution = async (params) => {
|
|
|
79
80
|
note: 'Waiting timed out before terminal state.',
|
|
80
81
|
});
|
|
81
82
|
};
|
|
83
|
+
/**
|
|
84
|
+
* Returns whether the pipeline in the event matches the configured tag filters.
|
|
85
|
+
*
|
|
86
|
+
* @param event EventBridge STARTED event
|
|
87
|
+
* @param pipelineName pipeline name from the event detail
|
|
88
|
+
* @returns true when the pipeline should be notified
|
|
89
|
+
*/
|
|
90
|
+
const isTargetPipelineEvent = async (event, pipelineName) => {
|
|
91
|
+
const tagFilters = (0, target_pipeline_predicates_1.parseTargetPipelineTags)(mustEnv('TARGET_PIPELINE_TAGS'));
|
|
92
|
+
const pipelineArn = (0, target_pipeline_predicates_1.resolvePipelineArn)(event.resources, event.region, event.account, pipelineName);
|
|
93
|
+
if (!pipelineArn) {
|
|
94
|
+
throw new Error('Unable to resolve pipeline ARN for tag lookup');
|
|
95
|
+
}
|
|
96
|
+
const allowedArns = (0, target_pipeline_predicates_1.parseAllowedPipelineArns)(process.env.TARGET_PIPELINE_ARNS);
|
|
97
|
+
if (!(0, target_pipeline_predicates_1.isAllowedPipelineArn)(pipelineArn, allowedArns)) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
const listed = await codepipeline.send(new client_codepipeline_1.ListTagsForResourceCommand({
|
|
101
|
+
resourceArn: pipelineArn,
|
|
102
|
+
}));
|
|
103
|
+
return (0, target_pipeline_predicates_1.matchesTargetPipelineTags)((0, target_pipeline_predicates_1.toPipelineTagMap)(listed.tags), tagFilters);
|
|
104
|
+
};
|
|
82
105
|
/**
|
|
83
106
|
* Lambda handler triggered by EventBridge when a pipeline execution transitions to STARTED.
|
|
84
|
-
* It
|
|
107
|
+
* It ignores pipelines that do not match `TARGET_PIPELINE_TAGS` (and optional `TARGET_PIPELINE_ARNS`), then waits for a terminal state.
|
|
85
108
|
*/
|
|
86
109
|
const handler = async (event) => {
|
|
87
110
|
const topicArn = mustEnv('SNS_TOPIC_ARN');
|
|
@@ -96,6 +119,9 @@ const handler = async (event) => {
|
|
|
96
119
|
});
|
|
97
120
|
return;
|
|
98
121
|
}
|
|
122
|
+
if (!await isTargetPipelineEvent(event, identity.pipelineName)) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
99
125
|
const waitIntervalSeconds = strict_env_resolver_1.StrictEnvResolver.resolve('WAIT_INTERVAL_SECONDS', strict_env_resolver_1.StrictEnvType.Number, { default: 10 });
|
|
100
126
|
const maxWaitMinutes = strict_env_resolver_1.StrictEnvResolver.resolve('MAX_WAIT_MINUTES', strict_env_resolver_1.StrictEnvType.Number, { default: 14 });
|
|
101
127
|
await waitPipelineExecution({
|
|
@@ -108,4 +134,4 @@ const handler = async (event) => {
|
|
|
108
134
|
});
|
|
109
135
|
};
|
|
110
136
|
exports.handler = handler;
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpZXIubGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Z1bmNzL25vdGlmaWVyLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzRUFBK0Y7QUFDL0Ysb0RBQWdFO0FBRWhFLDZEQUF1RTtBQUN2RSwrREFJK0I7QUFvQi9COztHQUVHO0FBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxzQkFBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRTlCOztHQUVHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsSUFBSSx3Q0FBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUVoRDs7R0FFRztBQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBWSxFQUFVLEVBQUUsQ0FBQyx1Q0FBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLG1DQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFFaEg7O0dBRUc7QUFDSCxNQUFNLEtBQUssR0FBRyxDQUFDLEVBQVUsRUFBaUIsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFL0Y7O0dBRUc7QUFDSCxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsUUFBZ0IsRUFBRSxPQUFnQixFQUFpQixFQUFFO0lBQzFFLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLDJCQUFjLENBQUM7UUFDaEMsUUFBUSxFQUFFLFFBQVE7UUFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO0tBQ2pDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLEtBQUssRUFBRSxNQU9wQyxFQUFpQixFQUFFO0lBQ2xCLE1BQU0sRUFDSixRQUFRLEVBQ1Is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LE1BQU0sY0FBYyxHQUFHLHVDQUFpQixDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxtQ0FBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTVHLE1BQU0scUJBQXFCLENBQUM7UUFDMUIsUUFBUTtRQUNSLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtRQUNuQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7UUFDakMsbUJBQW1CLEVBQUUsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN2RSxjQUFjLEVBQUUsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3hELFVBQVUsRUFBRSxLQUFLO0tBQ2xCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQTdCVyxRQUFBLE9BQU8sV0E2QmxCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29kZVBpcGVsaW5lQ2xpZW50LCBHZXRQaXBlbGluZUV4ZWN1dGlvbkNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY29kZXBpcGVsaW5lJztcbmltcG9ydCB7IFB1Ymxpc2hDb21tYW5kLCBTTlNDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc25zJztcbmltcG9ydCB0eXBlIHsgRXZlbnRCcmlkZ2VFdmVudCB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgU3RyaWN0RW52UmVzb2x2ZXIsIFN0cmljdEVudlR5cGUgfSBmcm9tICdzdHJpY3QtZW52LXJlc29sdmVyJztcbmltcG9ydCB7XG4gIGlzVGVybWluYWxFeGVjdXRpb25TdGF0dXMsXG4gIG5vcm1hbGl6ZUV4ZWN1dGlvblN0YXR1cyxcbiAgcmVzb2x2ZVBpcGVsaW5lRXhlY3V0aW9uSWRlbnRpdHksXG59IGZyb20gJy4vbm90aWZpZXItcHJlZGljYXRlcyc7XG5cbi8qKlxuICogRXZlbnRCcmlkZ2UgZGV0YWlsIHBheWxvYWQgZm9yIENvZGVQaXBlbGluZSBleGVjdXRpb24gc3RhdGUtY2hhbmdlIGV2ZW50cy5cbiAqL1xudHlwZSBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGFydGVkRGV0YWlsID0ge1xuICAncGlwZWxpbmUnPzogc3RyaW5nO1xuICAnc3RhdGUnPzogc3RyaW5nO1xuICAndmVyc2lvbic/OiBzdHJpbmc7XG4gICdleGVjdXRpb24taWQnPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBFdmVudEJyaWRnZSBldmVudCBmb3IgQ29kZVBpcGVsaW5lIGV4ZWN1dGlvbiBzdGF0ZS1jaGFuZ2Ugbm90aWZpY2F0aW9ucy5cbiAqL1xudHlwZSBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGFydGVkRXZlbnQgPSBFdmVudEJyaWRnZUV2ZW50PFxuICAnQ29kZVBpcGVsaW5lIFBpcGVsaW5lIEV4ZWN1dGlvbiBTdGF0ZSBDaGFuZ2UnLFxuICBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGFydGVkRGV0YWlsXG4+O1xuXG4vKipcbiAqIFNOUyBjbGllbnQgdXNlZCB0byBwdWJsaXNoIG5vdGlmaWNhdGlvbnMuXG4gKi9cbmNvbnN0IHNucyA9IG5ldyBTTlNDbGllbnQoe30pO1xuXG4vKipcbiAqIENvZGVQaXBlbGluZSBjbGllbnQgdXNlZCB0byB3YWl0IGZvciBleGVjdXRpb24gc3RhdGUgY2hhbmdlcy5cbiAqL1xuY29uc3QgY29kZXBpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZUNsaWVudCh7fSk7XG5cbi8qKlxuICogUmVhZHMgYSByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqL1xuY29uc3QgbXVzdEVudiA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4gU3RyaWN0RW52UmVzb2x2ZXIucmVzb2x2ZShuYW1lLCBTdHJpY3RFbnZUeXBlLlN0cmluZywgeyB0cmltOiB0cnVlIH0pO1xuXG4vKipcbiAqIFNsZWVwcyBmb3IgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICovXG5jb25zdCBzbGVlcCA9IChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuXG4vKipcbiAqIFB1Ymxpc2hlcyBhIEpTT04gcGF5bG9hZCB0byB0aGUgZ2l2ZW4gU05TIHRvcGljIEFSTi5cbiAqL1xuY29uc3QgcHVibGlzaCA9IGFzeW5jICh0b3BpY0Fybjogc3RyaW5nLCBwYXlsb2FkOiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGF3YWl0IHNucy5zZW5kKG5ldyBQdWJsaXNoQ29tbWFuZCh7XG4gICAgVG9waWNBcm46IHRvcGljQXJuLFxuICAgIE1lc3NhZ2U6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICB9KSk7XG59O1xuXG4vKipcbiAqIFdhaXRzIG9uIGEgQ29kZVBpcGVsaW5lIGV4ZWN1dGlvbiBhbmQgcHVibGlzaGVzIG5vdGlmaWNhdGlvbnMgd2hlbmV2ZXIgdGhlIGV4ZWN1dGlvbiBzdGF0dXMgY2hhbmdlcy5cbiAqL1xuY29uc3Qgd2FpdFBpcGVsaW5lRXhlY3V0aW9uID0gYXN5bmMgKHBhcmFtczoge1xuICB0b3BpY0Fybjogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZztcbiAgZXhlY3V0aW9uSWQ6IHN0cmluZztcbiAgd2FpdEludGVydmFsU2Vjb25kczogbnVtYmVyO1xuICBtYXhXYWl0TWludXRlczogbnVtYmVyO1xuICBzdGFydEV2ZW50OiBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGFydGVkRXZlbnQ7XG59KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHtcbiAgICB0b3BpY0FybixcbiAgICBwaXBlbGluZU5hbWUsXG4gICAgZXhlY3V0aW9uSWQsXG4gICAgd2FpdEludGVydmFsU2Vjb25kcyxcbiAgICBtYXhXYWl0TWludXRlcyxcbiAgICBzdGFydEV2ZW50LFxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIG1heFdhaXRNaW51dGVzICogNjBfMDAwO1xuICBsZXQgbGFzdFN0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8vIOacgOWIneOBqyBTVEFSVEVEIOOCkumAmuefpe+8iEV2ZW50QnJpZGdl55Sx5p2l77yJXG4gIGF3YWl0IHB1Ymxpc2godG9waWNBcm4sIHtcbiAgICB0eXBlOiAnY29kZXBpcGVsaW5lLmV4ZWN1dGlvbicsXG4gICAgcGhhc2U6ICdldmVudGJyaWRnZScsXG4gICAgcGlwZWxpbmVOYW1lLFxuICAgIGV4ZWN1dGlvbklkLFxuICAgIG9ic2VydmVkU3RhdGU6IHN0YXJ0RXZlbnQuZGV0YWlsPy5zdGF0ZSA/PyAnU1RBUlRFRCcsXG4gICAgb2JzZXJ2ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIGV2ZW50OiBzdGFydEV2ZW50LFxuICB9KTtcblxuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgY29kZXBpcGVsaW5lLnNlbmQobmV3IEdldFBpcGVsaW5lRXhlY3V0aW9uQ29tbWFuZCh7XG4gICAgICBwaXBlbGluZU5hbWUsXG4gICAgICBwaXBlbGluZUV4ZWN1dGlvbklkOiBleGVjdXRpb25JZCxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBzdGF0dXMgPSBub3JtYWxpemVFeGVjdXRpb25TdGF0dXMocmVzLnBpcGVsaW5lRXhlY3V0aW9uPy5zdGF0dXMpO1xuICAgIGlmIChzdGF0dXMgIT09IGxhc3RTdGF0dXMpIHtcbiAgICAgIGxhc3RTdGF0dXMgPSBzdGF0dXM7XG4gICAgICBhd2FpdCBwdWJsaXNoKHRvcGljQXJuLCB7XG4gICAgICAgIHR5cGU6ICdjb2RlcGlwZWxpbmUuZXhlY3V0aW9uJyxcbiAgICAgICAgcGhhc2U6ICd3YWl0JyxcbiAgICAgICAgcGlwZWxpbmVOYW1lLFxuICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgb2JzZXJ2ZWRTdGF0ZTogc3RhdHVzLFxuICAgICAgICBvYnNlcnZlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNUZXJtaW5hbEV4ZWN1dGlvblN0YXR1cyhzdGF0dXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgc2xlZXAod2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuICB9XG5cbiAgYXdhaXQgcHVibGlzaCh0b3BpY0Fybiwge1xuICAgIHR5cGU6ICdjb2RlcGlwZWxpbmUuZXhlY3V0aW9uJyxcbiAgICBwaGFzZTogJ3dhaXQnLFxuICAgIHBpcGVsaW5lTmFtZSxcbiAgICBleGVjdXRpb25JZCxcbiAgICBvYnNlcnZlZFN0YXRlOiBsYXN0U3RhdHVzID8/ICdVTktOT1dOJyxcbiAgICBvYnNlcnZlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgbm90ZTogJ1dhaXRpbmcgdGltZWQgb3V0IGJlZm9yZSB0ZXJtaW5hbCBzdGF0ZS4nLFxuICB9KTtcbn07XG5cbi8qKlxuICogTGFtYmRhIGhhbmRsZXIgdHJpZ2dlcmVkIGJ5IEV2ZW50QnJpZGdlIHdoZW4gYSBwaXBlbGluZSBleGVjdXRpb24gdHJhbnNpdGlvbnMgdG8gU1RBUlRFRC5cbiAqIEl0IHdhaXRzIGZvciB0aGUgZXhlY3V0aW9uIHN0YXR1cyB1bnRpbCBpdCByZWFjaGVzIGEgdGVybWluYWwgc3RhdGUgb3IgdGltZXMgb3V0LlxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jIChldmVudDogQ29kZVBpcGVsaW5lRXhlY3V0aW9uU3RhcnRlZEV2ZW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHRvcGljQXJuID0gbXVzdEVudignU05TX1RPUElDX0FSTicpO1xuICBjb25zdCBpZGVudGl0eSA9IHJlc29sdmVQaXBlbGluZUV4ZWN1dGlvbklkZW50aXR5KFxuICAgIGV2ZW50LmRldGFpbD8ucGlwZWxpbmUsXG4gICAgZXZlbnQuZGV0YWlsPy5bJ2V4ZWN1dGlvbi1pZCddLFxuICApO1xuXG4gIGlmICghaWRlbnRpdHkpIHtcbiAgICBhd2FpdCBwdWJsaXNoKHRvcGljQXJuLCB7XG4gICAgICB0eXBlOiAnY29kZXBpcGVsaW5lLmV4ZWN1dGlvbicsXG4gICAgICBwaGFzZTogJ2V2ZW50YnJpZGdlJyxcbiAgICAgIG9ic2VydmVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIG5vdGU6ICdNaXNzaW5nIHBpcGVsaW5lTmFtZSBvciBleGVjdXRpb25JZCBpbiBldmVudC5kZXRhaWwnLFxuICAgICAgZXZlbnQsXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgd2FpdEludGVydmFsU2Vjb25kcyA9IFN0cmljdEVudlJlc29sdmVyLnJlc29sdmUoJ1dBSVRfSU5URVJWQUxfU0VDT05EUycsIFN0cmljdEVudlR5cGUuTnVtYmVyLCB7IGRlZmF1bHQ6IDEwIH0pO1xuICBjb25zdCBtYXhXYWl0TWludXRlcyA9IFN0cmljdEVudlJlc29sdmVyLnJlc29sdmUoJ01BWF9XQUlUX01JTlVURVMnLCBTdHJpY3RFbnZUeXBlLk51bWJlciwgeyBkZWZhdWx0OiAxNCB9KTtcblxuICBhd2FpdCB3YWl0UGlwZWxpbmVFeGVjdXRpb24oe1xuICAgIHRvcGljQXJuLFxuICAgIHBpcGVsaW5lTmFtZTogaWRlbnRpdHkucGlwZWxpbmVOYW1lLFxuICAgIGV4ZWN1dGlvbklkOiBpZGVudGl0eS5leGVjdXRpb25JZCxcbiAgICB3YWl0SW50ZXJ2YWxTZWNvbmRzOiB3YWl0SW50ZXJ2YWxTZWNvbmRzID4gMCA/IHdhaXRJbnRlcnZhbFNlY29uZHMgOiAxMCxcbiAgICBtYXhXYWl0TWludXRlczogbWF4V2FpdE1pbnV0ZXMgPiAwID8gbWF4V2FpdE1pbnV0ZXMgOiAxNCxcbiAgICBzdGFydEV2ZW50OiBldmVudCxcbiAgfSk7XG59O1xuIl19
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpZXIubGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Z1bmNzL25vdGlmaWVyLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzRUFBMkg7QUFDM0gsb0RBQWdFO0FBRWhFLDZEQUF1RTtBQUN2RSwrREFJK0I7QUFDL0IsNkVBT3NDO0FBb0J0Qzs7R0FFRztBQUNILE1BQU0sR0FBRyxHQUFHLElBQUksc0JBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUU5Qjs7R0FFRztBQUNILE1BQU0sWUFBWSxHQUFHLElBQUksd0NBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFaEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFLENBQUMsdUNBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxtQ0FBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBRWhIOztHQUVHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQWlCLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRS9GOztHQUVHO0FBQ0gsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLFFBQWdCLEVBQUUsT0FBZ0IsRUFBaUIsRUFBRTtJQUMxRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSwyQkFBYyxDQUFDO1FBQ2hDLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztLQUNqQyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLEVBQUUsTUFPcEMsRUFBaUIsRUFBRTtJQUNsQixNQUFNLEVB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QU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTVHLE1BQU0scUJBQXFCLENBQUM7UUFDMUIsUUFBUTtRQUNSLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtRQUNuQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7UUFDakMsbUJBQW1CLEVBQUUsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN2RSxjQUFjLEVBQUUsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3hELFVBQVUsRUFBRSxLQUFLO0tBQ2xCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQWpDVyxRQUFBLE9BQU8sV0FpQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29kZVBpcGVsaW5lQ2xpZW50LCBHZXRQaXBlbGluZUV4ZWN1dGlvbkNvbW1hbmQsIExpc3RUYWdzRm9yUmVzb3VyY2VDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNvZGVwaXBlbGluZSc7XG5pbXBvcnQgeyBQdWJsaXNoQ29tbWFuZCwgU05TQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNucyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50QnJpZGdlRXZlbnQgfSBmcm9tICdhd3MtbGFtYmRhJztcbmltcG9ydCB7IFN0cmljdEVudlJlc29sdmVyLCBTdHJpY3RFbnZUeXBlIH0gZnJvbSAnc3RyaWN0LWVudi1yZXNvbHZlcic7XG5pbXBvcnQge1xuICBpc1Rlcm1pbmFsRXhlY3V0aW9uU3RhdHVzLFxuICBub3JtYWxpemVFeGVjdXRpb25TdGF0dXMsXG4gIHJlc29sdmVQaXBlbGluZUV4ZWN1dGlvbklkZW50aXR5LFxufSBmcm9tICcuL25vdGlmaWVyLXByZWRpY2F0ZXMnO1xuaW1wb3J0IHtcbiAgaXNBbGxvd2VkUGlwZWxpbmVBcm4sXG4gIG1hdGNoZXNUYXJnZXRQaXBlbGluZVRhZ3MsXG4gIHBhcnNlQWxsb3dlZFBpcGVsaW5lQXJucyxcbiAgcGFyc2VUYXJnZXRQaXBlbGluZVRhZ3MsXG4gIHJlc29sdmVQaXBlbGluZUFybixcbiAgdG9QaXBlbGluZVRhZ01hcCxcbn0gZnJvbSAnLi90YXJnZXQtcGlwZWxpbmUtcHJlZGljYXRlcyc7XG5cbi8qKlxuICogRXZlbnRCcmlkZ2UgZGV0YWlsIHBheWxvYWQgZm9yIENvZGVQaXBlbGluZSBleGVjdXRpb24gc3RhdGUtY2hhbmdlIGV2ZW50cy5cbiAqL1xudHlwZSBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGFydGVkRGV0YWlsID0ge1xuICAncGlwZWxpbmUnPzogc3RyaW5nO1xuICAnc3RhdGUnPzogc3RyaW5nO1xuICAndmVyc2lvbic/OiBzdHJpbmc7XG4gICdleGVjdXRpb24taWQnPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBFdmVudEJyaWRnZSBldmVudCBmb3IgQ29kZVBpcGVsaW5lIGV4ZWN1dGlvbiBzdGF0ZS1jaGFuZ2Ugbm90aWZpY2F0aW9ucy5cbiAqL1xudHlwZSBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGFydGVkRXZlbnQgPSBFdmVudEJyaWRnZUV2ZW50PFxuICAnQ29kZVBpcGVsaW5lIFBpcGVsaW5lIEV4ZWN1dGlvbiBTdGF0ZSBDaGFuZ2UnLFxuICBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGFydGVkRGV0YWlsXG4+O1xuXG4vKipcbiAqIFNOUyBjbGllbnQgdXNlZCB0byBwdWJsaXNoIG5vdGlmaWNhdGlvbnMuXG4gKi9cbmNvbnN0IHNucyA9IG5ldyBTTlNDbGllbnQoe30pO1xuXG4vKipcbiAqIENvZGVQaXBlbGluZSBjbGllbnQgdXNlZCB0byB3YWl0IGZvciBleGVjdXRpb24gc3RhdGUgY2hhbmdlcy5cbiAqL1xuY29uc3QgY29kZXBpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZUNsaWVudCh7fSk7XG5cbi8qKlxuICogUmVhZHMgYSByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqL1xuY29uc3QgbXVzdEVudiA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4gU3RyaWN0RW52UmVzb2x2ZXIucmVzb2x2ZShuYW1lLCBTdHJpY3RFbnZUeXBlLlN0cmluZywgeyB0cmltOiB0cnVlIH0pO1xuXG4vKipcbiAqIFNsZWVwcyBmb3IgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICovXG5jb25zdCBzbGVlcCA9IChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuXG4vKipcbiAqIFB1Ymxpc2hlcyBhIEpTT04gcGF5bG9hZCB0byB0aGUgZ2l2ZW4gU05TIHRvcGljIEFSTi5cbiAqL1xuY29uc3QgcHVibGlzaCA9IGFzeW5jICh0b3BpY0Fybjogc3RyaW5nLCBwYXlsb2FkOiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGF3YWl0IHNucy5zZW5kKG5ldyBQdWJsaXNoQ29tbWFuZCh7XG4gICAgVG9waWNBcm46IHRvcGljQXJuLFxuICAgIE1lc3NhZ2U6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICB9KSk7XG59O1xuXG4vKipcbiAqIFdhaXRzIG9uIGEgQ29kZVBpcGVsaW5lIGV4ZWN1dGlvbiBhbmQgcHVibGlzaGVzIG5vdGlmaWNhdGlvbnMgd2hlbmV2ZXIgdGhlIGV4ZWN1dGlvbiBzdGF0dXMgY2hhbmdlcy5cbiAqL1xuY29uc3Qgd2FpdFBpcGVsaW5lRXhlY3V0aW9uID0gYXN5bmMgKHBhcmFtczoge1xuICB0b3BpY0Fybjogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZztcbiAgZXhlY3V0aW9uSWQ6IHN0cmluZztcbiAgd2FpdEludGVydmFsU2Vjb25kczogbnVtYmVyO1xuICBtYXhXYWl0TWludXRlczogbnVtYmVyO1xuICBzdGFydEV2ZW50OiBDb2RlUGlwZWxpbmVFeGVjdXRpb25TdGFydGVkRXZlbnQ7XG59KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHtcbiAgICB0b3BpY0FybixcbiAgICBwaXBlbGluZU5hbWUsXG4gICAgZXhlY3V0aW9uSWQsXG4gICAgd2FpdEludGVydmFsU2Vjb25kcyxcbiAgICBtYXhXYWl0TWludXRlcyxcbiAgICBzdGFydEV2ZW50LFxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIG1heFdhaXRNaW51dGVzICogNjBfMDAwO1xuICBsZXQgbGFzdFN0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8vIOacgOWIneOBqyBTVEFSVEVEIOOCkumAmuefpe+8iEV2ZW50QnJpZGdl55Sx5p2l77yJXG4gIGF3YWl0IHB1Ymxpc2godG9waWNBcm4sIHtcbiAgICB0eXBlOiAnY29kZXBpcGVsaW5lLmV4ZWN1dGlvbicsXG4gICAgcGhhc2U6ICdldmVudGJyaWRnZScsXG4gICAgcGlwZWxpbmVOYW1lLFxuICAgIGV4ZWN1dGlvbklkLFxuICAgIG9ic2VydmVkU3RhdGU6IHN0YXJ0RXZlbnQuZGV0YWlsPy5zdGF0ZSA/PyAnU1RBUlRFRCcsXG4gICAgb2JzZXJ2ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIGV2ZW50OiBzdGFydEV2ZW50LFxuICB9KTtcblxuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgY29kZXBpcGVsaW5lLnNlbmQobmV3IEdldFBpcGVsaW5lRXhlY3V0aW9uQ29tbWFuZCh7XG4gICAgICBwaXBlbGluZU5hbWUsXG4gICAgICBwaXBlbGluZUV4ZWN1dGlvbklkOiBleGVjdXRpb25JZCxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBzdGF0dXMgPSBub3JtYWxpemVFeGVjdXRpb25TdGF0dXMocmVzLnBpcGVsaW5lRXhlY3V0aW9uPy5zdGF0dXMpO1xuICAgIGlmIChzdGF0dXMgIT09IGxhc3RTdGF0dXMpIHtcbiAgICAgIGxhc3RTdGF0dXMgPSBzdGF0dXM7XG4gICAgICBhd2FpdCBwdWJsaXNoKHRvcGljQXJuLCB7XG4gICAgICAgIHR5cGU6ICdjb2RlcGlwZWxpbmUuZXhlY3V0aW9uJyxcbiAgICAgICAgcGhhc2U6ICd3YWl0JyxcbiAgICAgICAgcGlwZWxpbmVOYW1lLFxuICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgb2JzZXJ2ZWRTdGF0ZTogc3RhdHVzLFxuICAgICAgICBvYnNlcnZlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNUZXJtaW5hbEV4ZWN1dGlvblN0YXR1cyhzdGF0dXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgc2xlZXAod2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuICB9XG5cbiAgYXdhaXQgcHVibGlzaCh0b3BpY0Fybiwge1xuICAgIHR5cGU6ICdjb2RlcGlwZWxpbmUuZXhlY3V0aW9uJyxcbiAgICBwaGFzZTogJ3dhaXQnLFxuICAgIHBpcGVsaW5lTmFtZSxcbiAgICBleGVjdXRpb25JZCxcbiAgICBvYnNlcnZlZFN0YXRlOiBsYXN0U3RhdHVzID8/ICdVTktOT1dOJyxcbiAgICBvYnNlcnZlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgbm90ZTogJ1dhaXRpbmcgdGltZWQgb3V0IGJlZm9yZSB0ZXJtaW5hbCBzdGF0ZS4nLFxuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBwaXBlbGluZSBpbiB0aGUgZXZlbnQgbWF0Y2hlcyB0aGUgY29uZmlndXJlZCB0YWcgZmlsdGVycy5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgRXZlbnRCcmlkZ2UgU1RBUlRFRCBldmVudFxuICogQHBhcmFtIHBpcGVsaW5lTmFtZSBwaXBlbGluZSBuYW1lIGZyb20gdGhlIGV2ZW50IGRldGFpbFxuICogQHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwaXBlbGluZSBzaG91bGQgYmUgbm90aWZpZWRcbiAqL1xuY29uc3QgaXNUYXJnZXRQaXBlbGluZUV2ZW50ID0gYXN5bmMgKFxuICBldmVudDogQ29kZVBpcGVsaW5lRXhlY3V0aW9uU3RhcnRlZEV2ZW50LFxuICBwaXBlbGluZU5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB0YWdGaWx0ZXJzID0gcGFyc2VUYXJnZXRQaXBlbGluZVRhZ3MobXVzdEVudignVEFSR0VUX1BJUEVMSU5FX1RBR1MnKSk7XG4gIGNvbnN0IHBpcGVsaW5lQXJuID0gcmVzb2x2ZVBpcGVsaW5lQXJuKFxuICAgIGV2ZW50LnJlc291cmNlcyxcbiAgICBldmVudC5yZWdpb24sXG4gICAgZXZlbnQuYWNjb3VudCxcbiAgICBwaXBlbGluZU5hbWUsXG4gICk7XG4gIGlmICghcGlwZWxpbmVBcm4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIHBpcGVsaW5lIEFSTiBmb3IgdGFnIGxvb2t1cCcpO1xuICB9XG5cbiAgY29uc3QgYWxsb3dlZEFybnMgPSBwYXJzZUFsbG93ZWRQaXBlbGluZUFybnMocHJvY2Vzcy5lbnYuVEFSR0VUX1BJUEVMSU5FX0FSTlMpO1xuICBpZiAoIWlzQWxsb3dlZFBpcGVsaW5lQXJuKHBpcGVsaW5lQXJuLCBhbGxvd2VkQXJucykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBsaXN0ZWQgPSBhd2FpdCBjb2RlcGlwZWxpbmUuc2VuZChuZXcgTGlzdFRhZ3NGb3JSZXNvdXJjZUNvbW1hbmQoe1xuICAgIHJlc291cmNlQXJuOiBwaXBlbGluZUFybixcbiAgfSkpO1xuXG4gIHJldHVybiBtYXRjaGVzVGFyZ2V0UGlwZWxpbmVUYWdzKHRvUGlwZWxpbmVUYWdNYXAobGlzdGVkLnRhZ3MpLCB0YWdGaWx0ZXJzKTtcbn07XG5cbi8qKlxuICogTGFtYmRhIGhhbmRsZXIgdHJpZ2dlcmVkIGJ5IEV2ZW50QnJpZGdlIHdoZW4gYSBwaXBlbGluZSBleGVjdXRpb24gdHJhbnNpdGlvbnMgdG8gU1RBUlRFRC5cbiAqIEl0IGlnbm9yZXMgcGlwZWxpbmVzIHRoYXQgZG8gbm90IG1hdGNoIGBUQVJHRVRfUElQRUxJTkVfVEFHU2AgKGFuZCBvcHRpb25hbCBgVEFSR0VUX1BJUEVMSU5FX0FSTlNgKSwgdGhlbiB3YWl0cyBmb3IgYSB0ZXJtaW5hbCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoZXZlbnQ6IENvZGVQaXBlbGluZUV4ZWN1dGlvblN0YXJ0ZWRFdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB0b3BpY0FybiA9IG11c3RFbnYoJ1NOU19UT1BJQ19BUk4nKTtcbiAgY29uc3QgaWRlbnRpdHkgPSByZXNvbHZlUGlwZWxpbmVFeGVjdXRpb25JZGVudGl0eShcbiAgICBldmVudC5kZXRhaWw/LnBpcGVsaW5lLFxuICAgIGV2ZW50LmRldGFpbD8uWydleGVjdXRpb24taWQnXSxcbiAgKTtcblxuICBpZiAoIWlkZW50aXR5KSB7XG4gICAgYXdhaXQgcHVibGlzaCh0b3BpY0Fybiwge1xuICAgICAgdHlwZTogJ2NvZGVwaXBlbGluZS5leGVjdXRpb24nLFxuICAgICAgcGhhc2U6ICdldmVudGJyaWRnZScsXG4gICAgICBvYnNlcnZlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBub3RlOiAnTWlzc2luZyBwaXBlbGluZU5hbWUgb3IgZXhlY3V0aW9uSWQgaW4gZXZlbnQuZGV0YWlsJyxcbiAgICAgIGV2ZW50LFxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghYXdhaXQgaXNUYXJnZXRQaXBlbGluZUV2ZW50KGV2ZW50LCBpZGVudGl0eS5waXBlbGluZU5hbWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgd2FpdEludGVydmFsU2Vjb25kcyA9IFN0cmljdEVudlJlc29sdmVyLnJlc29sdmUoJ1dBSVRfSU5URVJWQUxfU0VDT05EUycsIFN0cmljdEVudlR5cGUuTnVtYmVyLCB7IGRlZmF1bHQ6IDEwIH0pO1xuICBjb25zdCBtYXhXYWl0TWludXRlcyA9IFN0cmljdEVudlJlc29sdmVyLnJlc29sdmUoJ01BWF9XQUlUX01JTlVURVMnLCBTdHJpY3RFbnZUeXBlLk51bWJlciwgeyBkZWZhdWx0OiAxNCB9KTtcblxuICBhd2FpdCB3YWl0UGlwZWxpbmVFeGVjdXRpb24oe1xuICAgIHRvcGljQXJuLFxuICAgIHBpcGVsaW5lTmFtZTogaWRlbnRpdHkucGlwZWxpbmVOYW1lLFxuICAgIGV4ZWN1dGlvbklkOiBpZGVudGl0eS5leGVjdXRpb25JZCxcbiAgICB3YWl0SW50ZXJ2YWxTZWNvbmRzOiB3YWl0SW50ZXJ2YWxTZWNvbmRzID4gMCA/IHdhaXRJbnRlcnZhbFNlY29uZHMgOiAxMCxcbiAgICBtYXhXYWl0TWludXRlczogbWF4V2FpdE1pbnV0ZXMgPiAwID8gbWF4V2FpdE1pbnV0ZXMgOiAxNCxcbiAgICBzdGFydEV2ZW50OiBldmVudCxcbiAgfSk7XG59O1xuIl19
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tag filter used to decide whether a CodePipeline should be notified.
|
|
3
|
+
*/
|
|
4
|
+
export interface PipelineTagFilter {
|
|
5
|
+
/**
|
|
6
|
+
* Tag key that must be present on the pipeline.
|
|
7
|
+
*/
|
|
8
|
+
readonly key: string;
|
|
9
|
+
/**
|
|
10
|
+
* Accepted values for {@link key}. Matching is OR within this list.
|
|
11
|
+
*/
|
|
12
|
+
readonly values: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Returns whether `value` is a non-empty list of `{ key, values }` tag filters.
|
|
16
|
+
*
|
|
17
|
+
* @param value unknown JSON value
|
|
18
|
+
* @returns true when the value can be used as tag filters
|
|
19
|
+
*/
|
|
20
|
+
export declare const isPipelineTagFilterList: (value: unknown) => value is PipelineTagFilter[];
|
|
21
|
+
/**
|
|
22
|
+
* Returns whether `value` is a single tag filter with a non-empty key and values.
|
|
23
|
+
*
|
|
24
|
+
* @param value unknown JSON value
|
|
25
|
+
* @returns true when the value is a tag filter
|
|
26
|
+
*/
|
|
27
|
+
export declare const isPipelineTagFilter: (value: unknown) => value is PipelineTagFilter;
|
|
28
|
+
/**
|
|
29
|
+
* Parses `TARGET_PIPELINE_TAGS` JSON into tag filters.
|
|
30
|
+
*
|
|
31
|
+
* @param raw JSON string from the environment
|
|
32
|
+
* @returns normalized tag filters
|
|
33
|
+
* @throws when the JSON is invalid or not a tag-filter list
|
|
34
|
+
*/
|
|
35
|
+
export declare const parseTargetPipelineTags: (raw: string) => PipelineTagFilter[];
|
|
36
|
+
/**
|
|
37
|
+
* Trims keys/values and rejects duplicate keys.
|
|
38
|
+
*
|
|
39
|
+
* @param filters tag filters to normalize
|
|
40
|
+
* @returns normalized filters
|
|
41
|
+
* @throws when a key is duplicated
|
|
42
|
+
*/
|
|
43
|
+
export declare const normalizeTagFilters: (filters: readonly PipelineTagFilter[]) => PipelineTagFilter[];
|
|
44
|
+
/**
|
|
45
|
+
* Converts CodePipeline tag entries into a key/value map.
|
|
46
|
+
*
|
|
47
|
+
* @param tags tags returned by ListTagsForResource
|
|
48
|
+
* @returns map of tag key to tag value
|
|
49
|
+
*/
|
|
50
|
+
export declare const toPipelineTagMap: (tags: readonly {
|
|
51
|
+
readonly key?: string;
|
|
52
|
+
readonly value?: string;
|
|
53
|
+
}[] | undefined) => {
|
|
54
|
+
readonly [key: string]: string;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Returns whether pipeline tags satisfy every filter.
|
|
58
|
+
* Keys are AND; values within a filter are OR.
|
|
59
|
+
*
|
|
60
|
+
* @param pipelineTags tags currently on the pipeline
|
|
61
|
+
* @param filters required tag filters
|
|
62
|
+
* @returns true when the pipeline matches all filters
|
|
63
|
+
*/
|
|
64
|
+
export declare const matchesTargetPipelineTags: (pipelineTags: Readonly<{
|
|
65
|
+
[key: string]: string;
|
|
66
|
+
}>, filters: readonly PipelineTagFilter[]) => boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Resolves a CodePipeline ARN for ListTagsForResource.
|
|
69
|
+
*
|
|
70
|
+
* @param resources EventBridge `resources` array
|
|
71
|
+
* @param region event region
|
|
72
|
+
* @param account event account
|
|
73
|
+
* @param pipelineName pipeline name from the event detail
|
|
74
|
+
* @returns ARN when it can be resolved
|
|
75
|
+
*/
|
|
76
|
+
export declare const resolvePipelineArn: (resources: readonly string[] | undefined, region: string | undefined, account: string | undefined, pipelineName: string) => string | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* Returns whether `value` is a non-empty list of non-empty strings.
|
|
79
|
+
*
|
|
80
|
+
* @param value unknown JSON value
|
|
81
|
+
* @returns true when the value is a string list
|
|
82
|
+
*/
|
|
83
|
+
export declare const isNonEmptyStringList: (value: unknown) => value is string[];
|
|
84
|
+
/**
|
|
85
|
+
* Parses optional `TARGET_PIPELINE_ARNS` JSON into an ARN allowlist.
|
|
86
|
+
*
|
|
87
|
+
* @param raw JSON string from the environment, or undefined when unset
|
|
88
|
+
* @returns normalized ARNs, or undefined when the allowlist is not configured
|
|
89
|
+
* @throws when the JSON is invalid or not a string list
|
|
90
|
+
*/
|
|
91
|
+
export declare const parseAllowedPipelineArns: (raw: string | undefined) => string[] | undefined;
|
|
92
|
+
/**
|
|
93
|
+
* Returns whether a pipeline ARN is allowed when an allowlist is configured.
|
|
94
|
+
*
|
|
95
|
+
* @param pipelineArn resolved pipeline ARN
|
|
96
|
+
* @param allowedArns optional allowlist
|
|
97
|
+
* @returns true when no allowlist is set, or the ARN is listed
|
|
98
|
+
*/
|
|
99
|
+
export declare const isAllowedPipelineArn: (pipelineArn: string, allowedArns: readonly string[] | undefined) => boolean;
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isAllowedPipelineArn = exports.parseAllowedPipelineArns = exports.isNonEmptyStringList = exports.resolvePipelineArn = exports.matchesTargetPipelineTags = exports.toPipelineTagMap = exports.normalizeTagFilters = exports.parseTargetPipelineTags = exports.isPipelineTagFilter = exports.isPipelineTagFilterList = void 0;
|
|
4
|
+
const isNonEmptyString = (value) => typeof value === 'string' && value.trim().length > 0;
|
|
5
|
+
/**
|
|
6
|
+
* Returns whether `value` is a non-empty list of `{ key, values }` tag filters.
|
|
7
|
+
*
|
|
8
|
+
* @param value unknown JSON value
|
|
9
|
+
* @returns true when the value can be used as tag filters
|
|
10
|
+
*/
|
|
11
|
+
const isPipelineTagFilterList = (value) => {
|
|
12
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
for (const item of value) {
|
|
16
|
+
if (!(0, exports.isPipelineTagFilter)(item)) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
};
|
|
22
|
+
exports.isPipelineTagFilterList = isPipelineTagFilterList;
|
|
23
|
+
/**
|
|
24
|
+
* Returns whether `value` is a single tag filter with a non-empty key and values.
|
|
25
|
+
*
|
|
26
|
+
* @param value unknown JSON value
|
|
27
|
+
* @returns true when the value is a tag filter
|
|
28
|
+
*/
|
|
29
|
+
const isPipelineTagFilter = (value) => {
|
|
30
|
+
if (typeof value !== 'object' || value === null) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
if (!('key' in value) || !('values' in value)) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
if (!isNonEmptyString(value.key)) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
if (!Array.isArray(value.values) || value.values.length === 0) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
for (const tagValue of value.values) {
|
|
43
|
+
if (!isNonEmptyString(tagValue)) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
};
|
|
49
|
+
exports.isPipelineTagFilter = isPipelineTagFilter;
|
|
50
|
+
/**
|
|
51
|
+
* Parses `TARGET_PIPELINE_TAGS` JSON into tag filters.
|
|
52
|
+
*
|
|
53
|
+
* @param raw JSON string from the environment
|
|
54
|
+
* @returns normalized tag filters
|
|
55
|
+
* @throws when the JSON is invalid or not a tag-filter list
|
|
56
|
+
*/
|
|
57
|
+
const parseTargetPipelineTags = (raw) => {
|
|
58
|
+
let parsed;
|
|
59
|
+
try {
|
|
60
|
+
parsed = JSON.parse(raw);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
throw new Error('TARGET_PIPELINE_TAGS must be valid JSON');
|
|
64
|
+
}
|
|
65
|
+
if (!(0, exports.isPipelineTagFilterList)(parsed)) {
|
|
66
|
+
throw new Error('TARGET_PIPELINE_TAGS must be a non-empty array of { key, values }');
|
|
67
|
+
}
|
|
68
|
+
return (0, exports.normalizeTagFilters)(parsed);
|
|
69
|
+
};
|
|
70
|
+
exports.parseTargetPipelineTags = parseTargetPipelineTags;
|
|
71
|
+
/**
|
|
72
|
+
* Trims keys/values and rejects duplicate keys.
|
|
73
|
+
*
|
|
74
|
+
* @param filters tag filters to normalize
|
|
75
|
+
* @returns normalized filters
|
|
76
|
+
* @throws when a key is duplicated
|
|
77
|
+
*/
|
|
78
|
+
const normalizeTagFilters = (filters) => {
|
|
79
|
+
const seenKeys = new Set();
|
|
80
|
+
const normalized = [];
|
|
81
|
+
for (const filter of filters) {
|
|
82
|
+
const key = filter.key.trim();
|
|
83
|
+
if (seenKeys.has(key)) {
|
|
84
|
+
throw new Error(`Tag filter list contains duplicate key: ${key}`);
|
|
85
|
+
}
|
|
86
|
+
seenKeys.add(key);
|
|
87
|
+
normalized.push({
|
|
88
|
+
key,
|
|
89
|
+
values: filter.values.map((value) => value.trim()),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return normalized;
|
|
93
|
+
};
|
|
94
|
+
exports.normalizeTagFilters = normalizeTagFilters;
|
|
95
|
+
/**
|
|
96
|
+
* Converts CodePipeline tag entries into a key/value map.
|
|
97
|
+
*
|
|
98
|
+
* @param tags tags returned by ListTagsForResource
|
|
99
|
+
* @returns map of tag key to tag value
|
|
100
|
+
*/
|
|
101
|
+
const toPipelineTagMap = (tags) => {
|
|
102
|
+
const mapped = {};
|
|
103
|
+
if (!tags) {
|
|
104
|
+
return mapped;
|
|
105
|
+
}
|
|
106
|
+
for (const tag of tags) {
|
|
107
|
+
if (!tag.key || tag.value === undefined) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
mapped[tag.key] = tag.value;
|
|
111
|
+
}
|
|
112
|
+
return mapped;
|
|
113
|
+
};
|
|
114
|
+
exports.toPipelineTagMap = toPipelineTagMap;
|
|
115
|
+
/**
|
|
116
|
+
* Returns whether pipeline tags satisfy every filter.
|
|
117
|
+
* Keys are AND; values within a filter are OR.
|
|
118
|
+
*
|
|
119
|
+
* @param pipelineTags tags currently on the pipeline
|
|
120
|
+
* @param filters required tag filters
|
|
121
|
+
* @returns true when the pipeline matches all filters
|
|
122
|
+
*/
|
|
123
|
+
const matchesTargetPipelineTags = (pipelineTags, filters) => {
|
|
124
|
+
for (const filter of filters) {
|
|
125
|
+
const actual = pipelineTags[filter.key];
|
|
126
|
+
if (actual === undefined) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
if (!filter.values.includes(actual)) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return true;
|
|
134
|
+
};
|
|
135
|
+
exports.matchesTargetPipelineTags = matchesTargetPipelineTags;
|
|
136
|
+
/**
|
|
137
|
+
* Resolves a CodePipeline ARN for ListTagsForResource.
|
|
138
|
+
*
|
|
139
|
+
* @param resources EventBridge `resources` array
|
|
140
|
+
* @param region event region
|
|
141
|
+
* @param account event account
|
|
142
|
+
* @param pipelineName pipeline name from the event detail
|
|
143
|
+
* @returns ARN when it can be resolved
|
|
144
|
+
*/
|
|
145
|
+
const resolvePipelineArn = (resources, region, account, pipelineName) => {
|
|
146
|
+
const fromResources = resources?.[0];
|
|
147
|
+
if (fromResources) {
|
|
148
|
+
return fromResources;
|
|
149
|
+
}
|
|
150
|
+
if (!region || !account) {
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
return `arn:aws:codepipeline:${region}:${account}:${pipelineName}`;
|
|
154
|
+
};
|
|
155
|
+
exports.resolvePipelineArn = resolvePipelineArn;
|
|
156
|
+
/**
|
|
157
|
+
* Returns whether `value` is a non-empty list of non-empty strings.
|
|
158
|
+
*
|
|
159
|
+
* @param value unknown JSON value
|
|
160
|
+
* @returns true when the value is a string list
|
|
161
|
+
*/
|
|
162
|
+
const isNonEmptyStringList = (value) => {
|
|
163
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
for (const item of value) {
|
|
167
|
+
if (!isNonEmptyString(item)) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return true;
|
|
172
|
+
};
|
|
173
|
+
exports.isNonEmptyStringList = isNonEmptyStringList;
|
|
174
|
+
/**
|
|
175
|
+
* Parses optional `TARGET_PIPELINE_ARNS` JSON into an ARN allowlist.
|
|
176
|
+
*
|
|
177
|
+
* @param raw JSON string from the environment, or undefined when unset
|
|
178
|
+
* @returns normalized ARNs, or undefined when the allowlist is not configured
|
|
179
|
+
* @throws when the JSON is invalid or not a string list
|
|
180
|
+
*/
|
|
181
|
+
const parseAllowedPipelineArns = (raw) => {
|
|
182
|
+
if (raw === undefined || raw.trim() === '') {
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
let parsed;
|
|
186
|
+
try {
|
|
187
|
+
parsed = JSON.parse(raw);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
throw new Error('TARGET_PIPELINE_ARNS must be valid JSON');
|
|
191
|
+
}
|
|
192
|
+
if (!(0, exports.isNonEmptyStringList)(parsed)) {
|
|
193
|
+
throw new Error('TARGET_PIPELINE_ARNS must be a non-empty array of strings');
|
|
194
|
+
}
|
|
195
|
+
return parsed.map((arn) => arn.trim());
|
|
196
|
+
};
|
|
197
|
+
exports.parseAllowedPipelineArns = parseAllowedPipelineArns;
|
|
198
|
+
/**
|
|
199
|
+
* Returns whether a pipeline ARN is allowed when an allowlist is configured.
|
|
200
|
+
*
|
|
201
|
+
* @param pipelineArn resolved pipeline ARN
|
|
202
|
+
* @param allowedArns optional allowlist
|
|
203
|
+
* @returns true when no allowlist is set, or the ARN is listed
|
|
204
|
+
*/
|
|
205
|
+
const isAllowedPipelineArn = (pipelineArn, allowedArns) => {
|
|
206
|
+
if (!allowedArns) {
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
return allowedArns.includes(pipelineArn);
|
|
210
|
+
};
|
|
211
|
+
exports.isAllowedPipelineArn = isAllowedPipelineArn;
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0LXBpcGVsaW5lLXByZWRpY2F0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3MvdGFyZ2V0LXBpcGVsaW5lLXByZWRpY2F0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZUEsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQWMsRUFBbUIsRUFBRSxDQUMzRCxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFFdkQ7Ozs7O0dBS0c7QUFDSSxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBYyxFQUFnQyxFQUFFO0lBQ3RGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBQSwyQkFBbUIsRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQVpXLFFBQUEsdUJBQXVCLDJCQVlsQztBQUVGOzs7OztHQUtHO0FBQ0ksTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQWMsRUFBOEIsRUFBRTtJQUNoRixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDaEQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxPQUFPLEtBQUssQ0FBQztJQUNm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Q2xDLFdBQW1CLEVBQ25CLFdBQTBDLEVBQ2pDLEVBQUU7SUFDWCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQztBQVRXLFFBQUEsb0JBQW9CLHdCQVMvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGFnIGZpbHRlciB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIGEgQ29kZVBpcGVsaW5lIHNob3VsZCBiZSBub3RpZmllZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVRhZ0ZpbHRlciB7XG4gIC8qKlxuICAgKiBUYWcga2V5IHRoYXQgbXVzdCBiZSBwcmVzZW50IG9uIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBY2NlcHRlZCB2YWx1ZXMgZm9yIHtAbGluayBrZXl9LiBNYXRjaGluZyBpcyBPUiB3aXRoaW4gdGhpcyBsaXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuY29uc3QgaXNOb25FbXB0eVN0cmluZyA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHN0cmluZyA9PlxuICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwO1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBgdmFsdWVgIGlzIGEgbm9uLWVtcHR5IGxpc3Qgb2YgYHsga2V5LCB2YWx1ZXMgfWAgdGFnIGZpbHRlcnMuXG4gKlxuICogQHBhcmFtIHZhbHVlIHVua25vd24gSlNPTiB2YWx1ZVxuICogQHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB0YWcgZmlsdGVyc1xuICovXG5leHBvcnQgY29uc3QgaXNQaXBlbGluZVRhZ0ZpbHRlckxpc3QgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQaXBlbGluZVRhZ0ZpbHRlcltdID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICBpZiAoIWlzUGlwZWxpbmVUYWdGaWx0ZXIoaXRlbSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGB2YWx1ZWAgaXMgYSBzaW5nbGUgdGFnIGZpbHRlciB3aXRoIGEgbm9uLWVtcHR5IGtleSBhbmQgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSB1bmtub3duIEpTT04gdmFsdWVcbiAqIEByZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWUgaXMgYSB0YWcgZmlsdGVyXG4gKi9cbmV4cG9ydCBjb25zdCBpc1BpcGVsaW5lVGFnRmlsdGVyID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUGlwZWxpbmVUYWdGaWx0ZXIgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoISgna2V5JyBpbiB2YWx1ZSkgfHwgISgndmFsdWVzJyBpbiB2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFpc05vbkVtcHR5U3RyaW5nKHZhbHVlLmtleSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlLnZhbHVlcykgfHwgdmFsdWUudmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAoY29uc3QgdGFnVmFsdWUgb2YgdmFsdWUudmFsdWVzKSB7XG4gICAgaWYgKCFpc05vbkVtcHR5U3RyaW5nKHRhZ1ZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgYFRBUkdFVF9QSVBFTElORV9UQUdTYCBKU09OIGludG8gdGFnIGZpbHRlcnMuXG4gKlxuICogQHBhcmFtIHJhdyBKU09OIHN0cmluZyBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICogQHJldHVybnMgbm9ybWFsaXplZCB0YWcgZmlsdGVyc1xuICogQHRocm93cyB3aGVuIHRoZSBKU09OIGlzIGludmFsaWQgb3Igbm90IGEgdGFnLWZpbHRlciBsaXN0XG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZVRhcmdldFBpcGVsaW5lVGFncyA9IChyYXc6IHN0cmluZyk6IFBpcGVsaW5lVGFnRmlsdGVyW10gPT4ge1xuICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUQVJHRVRfUElQRUxJTkVfVEFHUyBtdXN0IGJlIHZhbGlkIEpTT04nKTtcbiAgfVxuXG4gIGlmICghaXNQaXBlbGluZVRhZ0ZpbHRlckxpc3QocGFyc2VkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVEFSR0VUX1BJUEVMSU5FX1RBR1MgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSBvZiB7IGtleSwgdmFsdWVzIH0nKTtcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVUYWdGaWx0ZXJzKHBhcnNlZCk7XG59O1xuXG4vKipcbiAqIFRyaW1zIGtleXMvdmFsdWVzIGFuZCByZWplY3RzIGR1cGxpY2F0ZSBrZXlzLlxuICpcbiAqIEBwYXJhbSBmaWx0ZXJzIHRhZyBmaWx0ZXJzIHRvIG5vcm1hbGl6ZVxuICogQHJldHVybnMgbm9ybWFsaXplZCBmaWx0ZXJzXG4gKiBAdGhyb3dzIHdoZW4gYSBrZXkgaXMgZHVwbGljYXRlZFxuICovXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplVGFnRmlsdGVycyA9IChmaWx0ZXJzOiByZWFkb25seSBQaXBlbGluZVRhZ0ZpbHRlcltdKTogUGlwZWxpbmVUYWdGaWx0ZXJbXSA9PiB7XG4gIGNvbnN0IHNlZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IFBpcGVsaW5lVGFnRmlsdGVyW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgY29uc3Qga2V5ID0gZmlsdGVyLmtleS50cmltKCk7XG4gICAgaWYgKHNlZW5LZXlzLmhhcyhrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhZyBmaWx0ZXIgbGlzdCBjb250YWlucyBkdXBsaWNhdGUga2V5OiAke2tleX1gKTtcbiAgICB9XG4gICAgc2VlbktleXMuYWRkKGtleSk7XG5cbiAgICBub3JtYWxpemVkLnB1c2goe1xuICAgICAga2V5LFxuICAgICAgdmFsdWVzOiBmaWx0ZXIudmFsdWVzLm1hcCgodmFsdWUpID0+IHZhbHVlLnRyaW0oKSksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZDtcbn07XG5cbi8qKlxuICogQ29udmVydHMgQ29kZVBpcGVsaW5lIHRhZyBlbnRyaWVzIGludG8gYSBrZXkvdmFsdWUgbWFwLlxuICpcbiAqIEBwYXJhbSB0YWdzIHRhZ3MgcmV0dXJuZWQgYnkgTGlzdFRhZ3NGb3JSZXNvdXJjZVxuICogQHJldHVybnMgbWFwIG9mIHRhZyBrZXkgdG8gdGFnIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCB0b1BpcGVsaW5lVGFnTWFwID0gKFxuICB0YWdzOiByZWFkb25seSB7IHJlYWRvbmx5IGtleT86IHN0cmluZzsgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmcgfVtdIHwgdW5kZWZpbmVkLFxuKTogeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IG1hcHBlZDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBpZiAoIXRhZ3MpIHtcbiAgICByZXR1cm4gbWFwcGVkO1xuICB9XG5cbiAgZm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuICAgIGlmICghdGFnLmtleSB8fCB0YWcudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG1hcHBlZFt0YWcua2V5XSA9IHRhZy52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBtYXBwZWQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBwaXBlbGluZSB0YWdzIHNhdGlzZnkgZXZlcnkgZmlsdGVyLlxuICogS2V5cyBhcmUgQU5EOyB2YWx1ZXMgd2l0aGluIGEgZmlsdGVyIGFyZSBPUi5cbiAqXG4gKiBAcGFyYW0gcGlwZWxpbmVUYWdzIHRhZ3MgY3VycmVudGx5IG9uIHRoZSBwaXBlbGluZVxuICogQHBhcmFtIGZpbHRlcnMgcmVxdWlyZWQgdGFnIGZpbHRlcnNcbiAqIEByZXR1cm5zIHRydWUgd2hlbiB0aGUgcGlwZWxpbmUgbWF0Y2hlcyBhbGwgZmlsdGVyc1xuICovXG5leHBvcnQgY29uc3QgbWF0Y2hlc1RhcmdldFBpcGVsaW5lVGFncyA9IChcbiAgcGlwZWxpbmVUYWdzOiBSZWFkb25seTx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9PixcbiAgZmlsdGVyczogcmVhZG9ubHkgUGlwZWxpbmVUYWdGaWx0ZXJbXSxcbik6IGJvb2xlYW4gPT4ge1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgY29uc3QgYWN0dWFsID0gcGlwZWxpbmVUYWdzW2ZpbHRlci5rZXldO1xuICAgIGlmIChhY3R1YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWZpbHRlci52YWx1ZXMuaW5jbHVkZXMoYWN0dWFsKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyBhIENvZGVQaXBlbGluZSBBUk4gZm9yIExpc3RUYWdzRm9yUmVzb3VyY2UuXG4gKlxuICogQHBhcmFtIHJlc291cmNlcyBFdmVudEJyaWRnZSBgcmVzb3VyY2VzYCBhcnJheVxuICogQHBhcmFtIHJlZ2lvbiBldmVudCByZWdpb25cbiAqIEBwYXJhbSBhY2NvdW50IGV2ZW50IGFjY291bnRcbiAqIEBwYXJhbSBwaXBlbGluZU5hbWUgcGlwZWxpbmUgbmFtZSBmcm9tIHRoZSBldmVudCBkZXRhaWxcbiAqIEByZXR1cm5zIEFSTiB3aGVuIGl0IGNhbiBiZSByZXNvbHZlZFxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZVBpcGVsaW5lQXJuID0gKFxuICByZXNvdXJjZXM6IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICByZWdpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgYWNjb3VudDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwaXBlbGluZU5hbWU6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGZyb21SZXNvdXJjZXMgPSByZXNvdXJjZXM/LlswXTtcbiAgaWYgKGZyb21SZXNvdXJjZXMpIHtcbiAgICByZXR1cm4gZnJvbVJlc291cmNlcztcbiAgfVxuICBpZiAoIXJlZ2lvbiB8fCAhYWNjb3VudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gYGFybjphd3M6Y29kZXBpcGVsaW5lOiR7cmVnaW9ufToke2FjY291bnR9OiR7cGlwZWxpbmVOYW1lfWA7XG59O1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBgdmFsdWVgIGlzIGEgbm9uLWVtcHR5IGxpc3Qgb2Ygbm9uLWVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHBhcmFtIHZhbHVlIHVua25vd24gSlNPTiB2YWx1ZVxuICogQHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBpcyBhIHN0cmluZyBsaXN0XG4gKi9cbmV4cG9ydCBjb25zdCBpc05vbkVtcHR5U3RyaW5nTGlzdCA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHN0cmluZ1tdID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICBpZiAoIWlzTm9uRW1wdHlTdHJpbmcoaXRlbSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogUGFyc2VzIG9wdGlvbmFsIGBUQVJHRVRfUElQRUxJTkVfQVJOU2AgSlNPTiBpbnRvIGFuIEFSTiBhbGxvd2xpc3QuXG4gKlxuICogQHBhcmFtIHJhdyBKU09OIHN0cmluZyBmcm9tIHRoZSBlbnZpcm9ubWVudCwgb3IgdW5kZWZpbmVkIHdoZW4gdW5zZXRcbiAqIEByZXR1cm5zIG5vcm1hbGl6ZWQgQVJOcywgb3IgdW5kZWZpbmVkIHdoZW4gdGhlIGFsbG93bGlzdCBpcyBub3QgY29uZmlndXJlZFxuICogQHRocm93cyB3aGVuIHRoZSBKU09OIGlzIGludmFsaWQgb3Igbm90IGEgc3RyaW5nIGxpc3RcbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlQWxsb3dlZFBpcGVsaW5lQXJucyA9IChyYXc6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdy50cmltKCkgPT09ICcnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RBUkdFVF9QSVBFTElORV9BUk5TIG11c3QgYmUgdmFsaWQgSlNPTicpO1xuICB9XG5cbiAgaWYgKCFpc05vbkVtcHR5U3RyaW5nTGlzdChwYXJzZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUQVJHRVRfUElQRUxJTkVfQVJOUyBtdXN0IGJlIGEgbm9uLWVtcHR5IGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQubWFwKChhcm4pID0+IGFybi50cmltKCkpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBwaXBlbGluZSBBUk4gaXMgYWxsb3dlZCB3aGVuIGFuIGFsbG93bGlzdCBpcyBjb25maWd1cmVkLlxuICpcbiAqIEBwYXJhbSBwaXBlbGluZUFybiByZXNvbHZlZCBwaXBlbGluZSBBUk5cbiAqIEBwYXJhbSBhbGxvd2VkQXJucyBvcHRpb25hbCBhbGxvd2xpc3RcbiAqIEByZXR1cm5zIHRydWUgd2hlbiBubyBhbGxvd2xpc3QgaXMgc2V0LCBvciB0aGUgQVJOIGlzIGxpc3RlZFxuICovXG5leHBvcnQgY29uc3QgaXNBbGxvd2VkUGlwZWxpbmVBcm4gPSAoXG4gIHBpcGVsaW5lQXJuOiBzdHJpbmcsXG4gIGFsbG93ZWRBcm5zOiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWFsbG93ZWRBcm5zKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gYWxsb3dlZEFybnMuaW5jbHVkZXMocGlwZWxpbmVBcm4pO1xufTtcblxuIl19
|
package/lib/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { CodePipelineEventNotifier, CodePipelineEventNotifierProps, } from './constructs/codepipeline-event-notifier';
|
|
1
|
+
export { CodePipelineEventNotifier, CodePipelineEventNotifierProps, TargetPipeline, TargetPipelineTag, } from './constructs/codepipeline-event-notifier';
|
package/lib/index.js
CHANGED
|
@@ -3,4 +3,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CodePipelineEventNotifier = void 0;
|
|
4
4
|
var codepipeline_event_notifier_1 = require("./constructs/codepipeline-event-notifier");
|
|
5
5
|
Object.defineProperty(exports, "CodePipelineEventNotifier", { enumerable: true, get: function () { return codepipeline_event_notifier_1.CodePipelineEventNotifier; } });
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0ZBS2tEO0FBSmhELHdJQUFBLHlCQUF5QixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgQ29kZVBpcGVsaW5lRXZlbnROb3RpZmllcixcbiAgQ29kZVBpcGVsaW5lRXZlbnROb3RpZmllclByb3BzLFxuICBUYXJnZXRQaXBlbGluZSxcbiAgVGFyZ2V0UGlwZWxpbmVUYWcsXG59IGZyb20gJy4vY29uc3RydWN0cy9jb2RlcGlwZWxpbmUtZXZlbnQtbm90aWZpZXInO1xuIl19
|
|
@@ -13,8 +13,17 @@ class CodePipelineEventNotifyStack extends aws_cdk_lib_1.Stack {
|
|
|
13
13
|
*/
|
|
14
14
|
constructor(scope, id) {
|
|
15
15
|
super(scope, id);
|
|
16
|
-
new codepipeline_event_notifier_1.CodePipelineEventNotifier(this, 'CodePipelineEventNotifier'
|
|
16
|
+
new codepipeline_event_notifier_1.CodePipelineEventNotifier(this, 'CodePipelineEventNotifier', {
|
|
17
|
+
targetPipeline: {
|
|
18
|
+
tags: [
|
|
19
|
+
{
|
|
20
|
+
key: 'Notify',
|
|
21
|
+
values: ['true'],
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
});
|
|
17
26
|
}
|
|
18
27
|
}
|
|
19
28
|
exports.CodePipelineEventNotifyStack = CodePipelineEventNotifyStack;
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXBpcGVsaW5lLWV2ZW50LW5vdGlmeS1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGFja3MvY29kZXBpcGVsaW5lLWV2ZW50LW5vdGlmeS1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBb0M7QUFFcEMsMkZBQXNGO0FBRXRGOztHQUVHO0FBQ0gsTUFBYSw0QkFBNkIsU0FBUSxtQkFBSztJQUNyRDs7O09BR0c7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksdURBQXlCLENBQUMsSUFBSSxFQUFFLDJCQUEyQixFQUFFO1lBQy9ELGNBQWMsRUFBRTtnQkFDZCxJQUFJLEVBQUU7b0JBQ0o7d0JBQ0UsR0FBRyxFQUFFLFFBQVE7d0JBQ2IsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO3FCQUNqQjtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbkJELG9FQW1CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBDb2RlUGlwZWxpbmVFdmVudE5vdGlmaWVyIH0gZnJvbSAnLi4vY29uc3RydWN0cy9jb2RlcGlwZWxpbmUtZXZlbnQtbm90aWZpZXInO1xuXG4vKipcbiAqIEV4YW1wbGUgc3RhY2sgd2lyaW5nIHVwIHtAbGluayBDb2RlUGlwZWxpbmVFdmVudE5vdGlmaWVyfS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvZGVQaXBlbGluZUV2ZW50Tm90aWZ5U3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIC8qKlxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIGFwcCBzY29wZVxuICAgKiBAcGFyYW0gaWQgdGhlIHN0YWNrIGlkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBDb2RlUGlwZWxpbmVFdmVudE5vdGlmaWVyKHRoaXMsICdDb2RlUGlwZWxpbmVFdmVudE5vdGlmaWVyJywge1xuICAgICAgdGFyZ2V0UGlwZWxpbmU6IHtcbiAgICAgICAgdGFnczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogJ05vdGlmeScsXG4gICAgICAgICAgICB2YWx1ZXM6IFsndHJ1ZSddLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59Il19
|
package/package.json
CHANGED
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@aws-sdk/client-codepipeline": "^3.1080.0",
|
|
43
43
|
"@aws-sdk/client-sns": "^3.1080.0",
|
|
44
|
+
"@gammarers/projen-projects": "^0.2.4",
|
|
44
45
|
"@stylistic/eslint-plugin": "^2",
|
|
45
46
|
"@types/aws-lambda": "^8.10.162",
|
|
46
47
|
"@types/jest": "^30.0.0",
|
|
@@ -48,20 +49,20 @@
|
|
|
48
49
|
"@typescript-eslint/eslint-plugin": "^8",
|
|
49
50
|
"@typescript-eslint/parser": "^8",
|
|
50
51
|
"aws-cdk-lib": "2.232.0",
|
|
51
|
-
"commit-and-tag-version": "^
|
|
52
|
+
"commit-and-tag-version": "^13",
|
|
52
53
|
"constructs": "10.5.1",
|
|
53
54
|
"esbuild": "^0.28.2",
|
|
54
55
|
"eslint": "^9",
|
|
55
56
|
"eslint-import-resolver-typescript": "^4.4.5",
|
|
56
57
|
"eslint-plugin-import": "^2.32.0",
|
|
57
|
-
"jest": "^30.5.
|
|
58
|
+
"jest": "^30.5.2",
|
|
58
59
|
"jest-junit": "^17",
|
|
59
60
|
"jsii": "6.0.x",
|
|
60
61
|
"jsii-diff": "^1.140.0",
|
|
61
62
|
"jsii-docgen": "^10.5.0",
|
|
62
63
|
"jsii-pacmak": "^1.140.0",
|
|
63
64
|
"jsii-rosetta": "6.0.x",
|
|
64
|
-
"projen": "^0.103.
|
|
65
|
+
"projen": "^0.103.25",
|
|
65
66
|
"strict-env-resolver": "^0.5.1",
|
|
66
67
|
"ts-jest": "^29.4.12",
|
|
67
68
|
"ts-node": "^10.9.2",
|
|
@@ -89,7 +90,7 @@
|
|
|
89
90
|
"publishConfig": {
|
|
90
91
|
"access": "public"
|
|
91
92
|
},
|
|
92
|
-
"version": "0.
|
|
93
|
+
"version": "0.3.1",
|
|
93
94
|
"jest": {
|
|
94
95
|
"coverageProvider": "v8",
|
|
95
96
|
"testMatch": [
|