aws-delivlib 13.3.3 → 13.4.2

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.
Files changed (65) hide show
  1. package/.gitattributes +22 -20
  2. package/cdk.out/{asset.663163693e04179c71265b44a325be7e6b8c4e90b081883a1b3f3393de2546ea → asset.7820644cf1fdec7cec290ed6fdd561e35f4015d4dcf03a20f8035dda3c0ac88a}/watcher-handler.d.ts +0 -0
  3. package/cdk.out/asset.7820644cf1fdec7cec290ed6fdd561e35f4015d4dcf03a20f8035dda3c0ac88a/watcher-handler.js +108 -0
  4. package/cdk.out/{asset.663163693e04179c71265b44a325be7e6b8c4e90b081883a1b3f3393de2546ea → asset.7820644cf1fdec7cec290ed6fdd561e35f4015d4dcf03a20f8035dda3c0ac88a}/watcher-handler.ts +0 -0
  5. package/cdk.out/asset.dc2e98009b027861f34e56eebb81faa5a3951ed9da80ce4a903a45de04268238/index.js +16465 -0
  6. package/cdk.out/cdk.out +1 -1
  7. package/cdk.out/delivlib-test.assets.json +9 -9
  8. package/cdk.out/delivlib-test.template.json +3 -3
  9. package/cdk.out/manifest.json +1840 -1840
  10. package/cdk.out/tree.json +412 -412
  11. package/lib/__tests__/build-spec.test.js +21 -2
  12. package/lib/__tests__/bump.test.js +21 -2
  13. package/lib/__tests__/canary.test.js +22 -3
  14. package/lib/__tests__/change-control-lambda/disable-transition.test.js +2 -1
  15. package/lib/__tests__/change-control-lambda/handler.test.js +23 -3
  16. package/lib/__tests__/chime-notifier.test.js +4 -3
  17. package/lib/__tests__/code-signing-cert.test.js +21 -2
  18. package/lib/__tests__/integ.delivlib.js +21 -2
  19. package/lib/__tests__/open-pgp-key-pair.test.js +21 -2
  20. package/lib/__tests__/pipeline.test.js +22 -3
  21. package/lib/__tests__/pr.test.js +21 -2
  22. package/lib/__tests__/publishing.test.js +38 -2
  23. package/lib/__tests__/registry-sync/ecr-mirror.test.js +21 -2
  24. package/lib/__tests__/registry-sync/mirror-source.test.js +21 -2
  25. package/lib/__tests__/shellable.test.js +22 -3
  26. package/lib/__tests__/test-stack.js +22 -3
  27. package/lib/change-control-lambda/disable-transition.js +21 -2
  28. package/lib/change-control-lambda/index.js +21 -2
  29. package/lib/change-controller.js +21 -2
  30. package/lib/chime-notifier/chime-notifier.js +22 -12
  31. package/lib/chime-notifier/chime-notifier.ts +1 -11
  32. package/lib/chime-notifier/{notifier-handler.d.ts → handler/notifier-handler.d.ts} +0 -0
  33. package/lib/chime-notifier/handler/notifier-handler.js +110 -0
  34. package/lib/chime-notifier/{notifier-handler.ts → handler/notifier-handler.ts} +4 -4
  35. package/lib/code-signing/certificate-signing-request.js +21 -2
  36. package/lib/code-signing/code-signing-certificate.js +21 -2
  37. package/lib/code-signing/private-key.js +21 -2
  38. package/lib/custom-resource-handlers/src/_cloud-formation.js +22 -3
  39. package/lib/custom-resource-handlers/src/_exec.js +22 -3
  40. package/lib/custom-resource-handlers/src/_rmrf.js +23 -4
  41. package/lib/custom-resource-handlers/src/certificate-signing-request.js +26 -7
  42. package/lib/custom-resource-handlers/src/certificate-signing-request.tsbuildinfo +1 -1
  43. package/lib/custom-resource-handlers/src/pgp-secret.js +27 -8
  44. package/lib/custom-resource-handlers/src/pgp-secret.tsbuildinfo +1 -1
  45. package/lib/custom-resource-handlers/src/private-key.js +26 -7
  46. package/lib/custom-resource-handlers/src/private-key.tsbuildinfo +1 -1
  47. package/lib/open-pgp-key-pair.js +21 -2
  48. package/lib/pipeline-notifications/chime.js +21 -2
  49. package/lib/pipeline-notifications/slack.js +21 -2
  50. package/lib/pipeline-watcher/handler/watcher-handler.js +21 -2
  51. package/lib/pipeline-watcher/watcher.js +21 -2
  52. package/lib/pipeline.d.ts +20 -6
  53. package/lib/pipeline.js +35 -10
  54. package/lib/pipeline.ts +34 -14
  55. package/lib/publishing/s3/publish.sh +2 -1
  56. package/lib/publishing.js +22 -3
  57. package/lib/pull-request/bump.js +21 -2
  58. package/lib/pull-request/merge-back.js +22 -3
  59. package/lib/pull-request/pr.js +21 -2
  60. package/lib/shellable.js +22 -3
  61. package/lib/util.js +23 -4
  62. package/package.json +36 -37
  63. package/cdk.out/asset.663163693e04179c71265b44a325be7e6b8c4e90b081883a1b3f3393de2546ea/watcher-handler.js +0 -89
  64. package/cdk.out/asset.d81bf2d4c389ecd69472cf4b27599e1ffbe0c1543104f45d035834e863f64ca7/index.js +0 -14129
  65. package/lib/chime-notifier/notifier-handler.js +0 -91
@@ -1,91 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handler = exports.codePipeline = void 0;
4
- const https = require("https");
5
- // eslint-disable-next-line import/no-extraneous-dependencies
6
- const AWS = require("aws-sdk");
7
- // export for tests
8
- exports.codePipeline = new AWS.CodePipeline();
9
- /**
10
- * Lambda handler for the codepipeline state change events
11
- *
12
- * {
13
- * "version": "0",
14
- * "id": event_Id,
15
- * "detail-type": "CodePipeline Pipeline Execution State Change",
16
- * "source": "aws.codepipeline",
17
- * "account": Pipeline_Account,
18
- * "time": TimeStamp,
19
- * "region": "us-east-1",
20
- * "resources": [
21
- * "arn:aws:codepipeline:us-east-1:account_ID:myPipeline"
22
- * ],
23
- * "detail": {
24
- * "pipeline": "myPipeline",
25
- * "version": "1",
26
- * "state": "STARTED",
27
- * "execution-id": execution_Id
28
- * }
29
- * }
30
- */
31
- async function handler(event) {
32
- var _a, _b, _c, _d, _e, _f, _g, _h;
33
- // Log the event so we can have a look in CloudWatch logs
34
- process.stdout.write(`${JSON.stringify(event)}\n`);
35
- const webhookUrls = event.webhookUrls || [];
36
- if (webhookUrls.length === 0) {
37
- throw new Error("Expected event field 'webhookUrls'");
38
- }
39
- const messageTemplate = event.message;
40
- if (!messageTemplate) {
41
- throw new Error("Expected event field 'message'");
42
- }
43
- const details = event.detail || {};
44
- const pipelineName = details.pipeline;
45
- const pipelineExecutionId = details['execution-id'];
46
- if (!pipelineName || !pipelineExecutionId) {
47
- process.stderr.write('Malformed event!\n');
48
- return;
49
- }
50
- // Describe the revision that caused the pipeline to fail
51
- const response = await exports.codePipeline.getPipelineExecution({ pipelineName, pipelineExecutionId }).promise();
52
- process.stdout.write(`${JSON.stringify(response)}\n`);
53
- const firstArtifact = ((_b = (_a = response.pipelineExecution) === null || _a === void 0 ? void 0 : _a.artifactRevisions) !== null && _b !== void 0 ? _b : [])[0];
54
- const revisionSummary = (_d = (_c = firstArtifact === null || firstArtifact === void 0 ? void 0 : firstArtifact.revisionSummary) !== null && _c !== void 0 ? _c : firstArtifact === null || firstArtifact === void 0 ? void 0 : firstArtifact.revisionId) !== null && _d !== void 0 ? _d : `execution ${pipelineExecutionId}`;
55
- // Find the action that caused the pipeline to fail (no pagination for now)
56
- const actionResponse = await exports.codePipeline.listActionExecutions({ pipelineName, filter: { pipelineExecutionId } }).promise();
57
- process.stdout.write(`${JSON.stringify(actionResponse)}\n`);
58
- const failingActionDetails = (actionResponse.actionExecutionDetails || []).find(d => d.status === 'Failed');
59
- const failingAction = (_e = failingActionDetails === null || failingActionDetails === void 0 ? void 0 : failingActionDetails.actionName) !== null && _e !== void 0 ? _e : 'UNKNOWN';
60
- const failureUrl = (_h = (_g = (_f = failingActionDetails === null || failingActionDetails === void 0 ? void 0 : failingActionDetails.output) === null || _f === void 0 ? void 0 : _f.executionResult) === null || _g === void 0 ? void 0 : _g.externalExecutionUrl) !== null && _h !== void 0 ? _h : '???';
61
- const message = messageTemplate
62
- .replace(/\$PIPELINE/g, pipelineName)
63
- .replace(/\$REVISION/g, revisionSummary)
64
- .replace(/\$ACTION/g, failingAction)
65
- .replace(/\$URL/g, failureUrl);
66
- // Post the failure to all given Chime webhook URLs
67
- await Promise.all(webhookUrls.map(url => sendChimeNotification(url, message)));
68
- }
69
- exports.handler = handler;
70
- async function sendChimeNotification(url, message) {
71
- return new Promise((ok, ko) => {
72
- const req = https.request(url, {
73
- method: 'POST',
74
- headers: {
75
- 'Content-Type': 'application/json',
76
- },
77
- }, (res) => {
78
- if (res.statusCode !== 200) {
79
- ko(new Error(`Server responded with ${res.statusCode}: ${JSON.stringify(res.headers)}`));
80
- }
81
- res.setEncoding('utf8');
82
- res.on('data', () => { });
83
- res.on('error', ko);
84
- res.on('end', ok);
85
- });
86
- req.on('error', ko);
87
- req.write(JSON.stringify({ Content: message }));
88
- req.end();
89
- });
90
- }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpZXItaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm5vdGlmaWVyLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLDZEQUE2RDtBQUM3RCwrQkFBK0I7QUFHL0IsbUJBQW1CO0FBQ04sUUFBQSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7QUFFbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNJLEtBQUssVUFBVSxPQUFPLENBQUMsS0FBVTs7SUFDdEMseURBQXlEO0lBQ3pELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbkQsTUFBTSxXQUFXLEdBQWEsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7SUFDdEQsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztLQUFFO0lBRXhGLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDdEMsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztLQUFFO0lBRTVFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ25DLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDdEMsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFcEQsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1FBQ3pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDM0MsT0FBTztLQUNSO0lBRUQseURBQXlEO0lB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LEVBQUUsR0FBa0MsQ0FBQyxDQUFDLENBQUM7WUFDekQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwQixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrJztcblxuXG4vLyBleHBvcnQgZm9yIHRlc3RzXG5leHBvcnQgY29uc3QgY29kZVBpcGVsaW5lID0gbmV3IEFXUy5Db2RlUGlwZWxpbmUoKTtcblxuLyoqXG4gKiBMYW1iZGEgaGFuZGxlciBmb3IgdGhlIGNvZGVwaXBlbGluZSBzdGF0ZSBjaGFuZ2UgZXZlbnRzXG4gKlxuICoge1xuICogICAgIFwidmVyc2lvblwiOiBcIjBcIixcbiAqICAgICBcImlkXCI6IGV2ZW50X0lkLFxuICogICAgIFwiZGV0YWlsLXR5cGVcIjogXCJDb2RlUGlwZWxpbmUgUGlwZWxpbmUgRXhlY3V0aW9uIFN0YXRlIENoYW5nZVwiLFxuICogICAgIFwic291cmNlXCI6IFwiYXdzLmNvZGVwaXBlbGluZVwiLFxuICogICAgIFwiYWNjb3VudFwiOiBQaXBlbGluZV9BY2NvdW50LFxuICogICAgIFwidGltZVwiOiBUaW1lU3RhbXAsXG4gKiAgICAgXCJyZWdpb25cIjogXCJ1cy1lYXN0LTFcIixcbiAqICAgICBcInJlc291cmNlc1wiOiBbXG4gKiAgICAgICAgIFwiYXJuOmF3czpjb2RlcGlwZWxpbmU6dXMtZWFzdC0xOmFjY291bnRfSUQ6bXlQaXBlbGluZVwiXG4gKiAgICAgXSxcbiAqICAgICBcImRldGFpbFwiOiB7XG4gKiAgICAgICAgIFwicGlwZWxpbmVcIjogXCJteVBpcGVsaW5lXCIsXG4gKiAgICAgICAgIFwidmVyc2lvblwiOiBcIjFcIixcbiAqICAgICAgICAgXCJzdGF0ZVwiOiBcIlNUQVJURURcIixcbiAqICAgICAgICAgXCJleGVjdXRpb24taWRcIjogZXhlY3V0aW9uX0lkXG4gKiAgICAgfVxuICogfVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogYW55KSB7XG4gIC8vIExvZyB0aGUgZXZlbnQgc28gd2UgY2FuIGhhdmUgYSBsb29rIGluIENsb3VkV2F0Y2ggbG9nc1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtKU09OLnN0cmluZ2lmeShldmVudCl9XFxuYCk7XG5cbiAgY29uc3Qgd2ViaG9va1VybHM6IHN0cmluZ1tdID0gZXZlbnQud2ViaG9va1VybHMgfHwgW107XG4gIGlmICh3ZWJob29rVXJscy5sZW5ndGggPT09IDApIHsgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgZXZlbnQgZmllbGQgJ3dlYmhvb2tVcmxzJ1wiKTsgfVxuXG4gIGNvbnN0IG1lc3NhZ2VUZW1wbGF0ZSA9IGV2ZW50Lm1lc3NhZ2U7XG4gIGlmICghbWVzc2FnZVRlbXBsYXRlKSB7IHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGV2ZW50IGZpZWxkICdtZXNzYWdlJ1wiKTsgfVxuXG4gIGNvbnN0IGRldGFpbHMgPSBldmVudC5kZXRhaWwgfHwge307XG4gIGNvbnN0IHBpcGVsaW5lTmFtZSA9IGRldGFpbHMucGlwZWxpbmU7XG4gIGNvbnN0IHBpcGVsaW5lRXhlY3V0aW9uSWQgPSBkZXRhaWxzWydleGVjdXRpb24taWQnXTtcblxuICBpZiAoIXBpcGVsaW5lTmFtZSB8fCAhcGlwZWxpbmVFeGVjdXRpb25JZCkge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKCdNYWxmb3JtZWQgZXZlbnQhXFxuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVzY3JpYmUgdGhlIHJldmlzaW9uIHRoYXQgY2F1c2VkIHRoZSBwaXBlbGluZSB0byBmYWlsXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29kZVBpcGVsaW5lLmdldFBpcGVsaW5lRXhlY3V0aW9uKHsgcGlwZWxpbmVOYW1lLCBwaXBlbGluZUV4ZWN1dGlvbklkIH0pLnByb21pc2UoKTtcbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpfVxcbmApO1xuICBjb25zdCBmaXJzdEFydGlmYWN0OiBBV1MuQ29kZVBpcGVsaW5lLkFydGlmYWN0UmV2aXNpb24gfCB1bmRlZmluZWQgPSAocmVzcG9uc2UucGlwZWxpbmVFeGVjdXRpb24/LmFydGlmYWN0UmV2aXNpb25zID8/IFtdKVswXTtcbiAgY29uc3QgcmV2aXNpb25TdW1tYXJ5ID0gZmlyc3RBcnRpZmFjdD8ucmV2aXNpb25TdW1tYXJ5ID8/IGZpcnN0QXJ0aWZhY3Q/LnJldmlzaW9uSWQgPz8gYGV4ZWN1dGlvbiAke3BpcGVsaW5lRXhlY3V0aW9uSWR9YDtcblxuICAvLyBGaW5kIHRoZSBhY3Rpb24gdGhhdCBjYXVzZWQgdGhlIHBpcGVsaW5lIHRvIGZhaWwgKG5vIHBhZ2luYXRpb24gZm9yIG5vdylcbiAgY29uc3QgYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCBjb2RlUGlwZWxpbmUubGlzdEFjdGlvbkV4ZWN1dGlvbnMoeyBwaXBlbGluZU5hbWUsIGZpbHRlcjogeyBwaXBlbGluZUV4ZWN1dGlvbklkIH0gfSkucHJvbWlzZSgpO1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtKU09OLnN0cmluZ2lmeShhY3Rpb25SZXNwb25zZSl9XFxuYCk7XG4gIGNvbnN0IGZhaWxpbmdBY3Rpb25EZXRhaWxzID0gKGFjdGlvblJlc3BvbnNlLmFjdGlvbkV4ZWN1dGlvbkRldGFpbHMgfHwgW10pLmZpbmQoZCA9PiBkLnN0YXR1cyA9PT0gJ0ZhaWxlZCcpO1xuICBjb25zdCBmYWlsaW5nQWN0aW9uID0gZmFpbGluZ0FjdGlvbkRldGFpbHM/LmFjdGlvbk5hbWUgPz8gJ1VOS05PV04nO1xuICBjb25zdCBmYWlsdXJlVXJsID0gZmFpbGluZ0FjdGlvbkRldGFpbHM/Lm91dHB1dD8uZXhlY3V0aW9uUmVzdWx0Py5leHRlcm5hbEV4ZWN1dGlvblVybCA/PyAnPz8/JztcblxuICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZVRlbXBsYXRlXG4gICAgLnJlcGxhY2UoL1xcJFBJUEVMSU5FL2csIHBpcGVsaW5lTmFtZSlcbiAgICAucmVwbGFjZSgvXFwkUkVWSVNJT04vZywgcmV2aXNpb25TdW1tYXJ5KVxuICAgIC5yZXBsYWNlKC9cXCRBQ1RJT04vZywgZmFpbGluZ0FjdGlvbilcbiAgICAucmVwbGFjZSgvXFwkVVJML2csIGZhaWx1cmVVcmwpO1xuXG4gIC8vIFBvc3QgdGhlIGZhaWx1cmUgdG8gYWxsIGdpdmVuIENoaW1lIHdlYmhvb2sgVVJMc1xuICBhd2FpdCBQcm9taXNlLmFsbCh3ZWJob29rVXJscy5tYXAodXJsID0+IHNlbmRDaGltZU5vdGlmaWNhdGlvbih1cmwsIG1lc3NhZ2UpKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbmRDaGltZU5vdGlmaWNhdGlvbih1cmw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2ssIGtvKSA9PiB7XG4gICAgY29uc3QgcmVxID0gaHR0cHMucmVxdWVzdCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICB9LCAocmVzKSA9PiB7XG4gICAgICBpZiAocmVzLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICBrbyhuZXcgRXJyb3IoYFNlcnZlciByZXNwb25kZWQgd2l0aCAke3Jlcy5zdGF0dXNDb2RlfTogJHtKU09OLnN0cmluZ2lmeShyZXMuaGVhZGVycyl9YCkpO1xuICAgICAgfVxuXG4gICAgICByZXMuc2V0RW5jb2RpbmcoJ3V0ZjgnKTtcbiAgICAgIHJlcy5vbignZGF0YScsICgpID0+IHsgLyogZ29iYmxlIGdvYmJsZSBhbmQgaWdub3JlICovIH0pO1xuICAgICAgcmVzLm9uKCdlcnJvcicsIGtvKTtcbiAgICAgIHJlcy5vbignZW5kJywgb2spO1xuICAgIH0pO1xuXG4gICAgcmVxLm9uKCdlcnJvcicsIGtvKTtcbiAgICByZXEud3JpdGUoSlNPTi5zdHJpbmdpZnkoeyBDb250ZW50OiBtZXNzYWdlIH0pKTtcbiAgICByZXEuZW5kKCk7XG4gIH0pO1xufSJdfQ==