awslint 2.3.0 → 2.7.0

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/LICENSE CHANGED
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
189
+ Copyright 2018-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
package/NOTICE CHANGED
@@ -1,2 +1,2 @@
1
1
  AWS Cloud Development Kit (AWS CDK)
2
- Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ Copyright 2018-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
package/bin/awslint.js CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  /* eslint-disable no-console */
5
5
  const child_process = require("child_process");
6
6
  const path = require("path");
7
- const colors = require("colors");
7
+ const chalk = require("chalk");
8
8
  const fs = require("fs-extra");
9
9
  const reflect = require("jsii-reflect");
10
10
  const yargs = require("yargs");
@@ -39,7 +39,8 @@ async function main() {
39
39
  .example('awslint -x "*:@aws-cdk/aws-s3*"', 'evaluate all rules in all scopes besides ones that begin with "@aws-cdk/aws-s3"')
40
40
  .example('awslint --save', 'updated "package.json" with "exclude"s for all failing rules');
41
41
  if (!process.stdout.isTTY) {
42
- colors.disable();
42
+ // Disable chalk color highlighting
43
+ process.env.FORCE_COLOR = '0';
43
44
  }
44
45
  const args = argv.argv;
45
46
  stackTrace = args.verbose || args.debug;
@@ -52,7 +53,7 @@ async function main() {
52
53
  const config = path.join(workdir, 'package.json');
53
54
  if (command === 'list') {
54
55
  for (const rule of lib_1.ALL_RULES_LINTER.rules) {
55
- console.info(`${colors.cyan(rule.code)}: ${rule.message}`);
56
+ console.info(`${chalk.cyan(rule.code)}: ${rule.message}`);
56
57
  }
57
58
  return;
58
59
  }
@@ -102,29 +103,29 @@ async function main() {
102
103
  switch (diag.level) {
103
104
  case lib_1.DiagnosticLevel.Success:
104
105
  if (args.verbose) {
105
- color = colors.gray;
106
+ color = chalk.gray;
106
107
  }
107
108
  break;
108
109
  case lib_1.DiagnosticLevel.Error:
109
110
  errors++;
110
- color = colors.red;
111
+ color = chalk.red;
111
112
  if (args.save) {
112
113
  excludesToSave.push(suppressionKey);
113
114
  }
114
115
  break;
115
116
  case lib_1.DiagnosticLevel.Warning:
116
117
  if (!args.quiet) {
117
- color = colors.yellow;
118
+ color = chalk.yellow;
118
119
  }
119
120
  break;
120
121
  case lib_1.DiagnosticLevel.Skipped:
121
122
  if (!args.quiet) {
122
- color = colors.blue;
123
+ color = chalk.blue;
123
124
  }
124
125
  break;
125
126
  }
126
127
  if (color) {
127
- console.error(color(`${lib_1.DiagnosticLevel[diag.level].toLowerCase()}: [${colors.bold(`awslint:${diag.rule.code}`)}:${colors.bold(diag.scope)}] ${diag.message}`));
128
+ console.error(color(`${lib_1.DiagnosticLevel[diag.level].toLowerCase()}: [${chalk.bold(`awslint:${diag.rule.code}`)}:${chalk.bold(diag.scope)}] ${diag.message}`));
128
129
  }
129
130
  }
130
131
  if (excludesToSave.length > 0) {
@@ -169,7 +170,7 @@ async function main() {
169
170
  }
170
171
  }
171
172
  main().catch(e => {
172
- console.error(colors.red(e.message));
173
+ console.error(chalk.red(e.message));
173
174
  if (stackTrace) {
174
175
  console.error(e.stack);
175
176
  }
@@ -219,4 +220,4 @@ async function shell(command) {
219
220
  child.once('error', ko);
220
221
  });
221
222
  }
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzbGludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3c2xpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0QkFBNEI7QUFDNUIsK0JBQStCO0FBQy9CLCtDQUErQztBQUMvQyw2QkFBNkI7QUFDN0IsaUNBQWlDO0FBQ2pDLCtCQUErQjtBQUMvQix3Q0FBd0M7QUFDeEMsK0JBQStCO0FBQy9CLGdDQUEyRDtBQUUzRCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFFdkIsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxJQUFJLEdBQUcsS0FBSztTQUNmLEdBQUcsQ0FBQyxTQUFTLENBQUM7U0FDZCxLQUFLLENBQUMsNkJBQTZCLENBQUM7U0FDcEMsY0FBYyxDQUFDLElBQUksQ0FBQztTQUNwQixPQUFPLENBQUMsSUFBSSxFQUFFLG1DQUFtQyxDQUFDO1NBQ2xELE9BQU8sQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUM7U0FDM0MsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsNEJBQTRCLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztTQUNwRyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSw4REFBOEQsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7U0FDbkksTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLHNFQUFzRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUNqSSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSx3Q0FBd0MsRUFBRSxPQUFPLEVBQUUsS0FBSyxF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LEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUNqQyxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ2hCLE9BQU8sRUFBRSxFQUFFLENBQUM7YUFDYjtpQkFBTTtnQkFDTCxPQUFPLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLE9BQU8sdUJBQXVCLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNqRTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjb2xvcnMgZnJvbSAnY29sb3JzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHJlZmxlY3QgZnJvbSAnanNpaS1yZWZsZWN0JztcbmltcG9ydCAqIGFzIHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCB7IEFMTF9SVUxFU19MSU5URVIsIERpYWdub3N0aWNMZXZlbCB9IGZyb20gJy4uL2xpYic7XG5cbmxldCBzdGFja1RyYWNlID0gZmFsc2U7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IGFyZ3YgPSB5YXJnc1xuICAgIC5lbnYoJ0FXU0xJTlQnKVxuICAgIC51c2FnZSgnYXdzbGludCBbb3B0aW9uc10gW2NvbW1hbmRdJylcbiAgICAuc2hvd0hlbHBPbkZhaWwodHJ1ZSlcbiAgICAuY29tbWFuZCgnJDAnLCAnbGludCB0aGUgY3VycmVudCBtb2R1bGUgKGRlZmF1bHQpJylcbiAgICAuY29tbWFuZCgnbGlzdCcsICdsaXN0IGFsbCBhdmFpbGFibGUgcnVsZXMnKVxuICAgIC5vcHRpb24oJ2luY2x1ZGUnLCB7IGFsaWFzOiAnaScsIHR5cGU6ICdhcnJheScsIGRlc2M6ICdldmFsdWF0ZSBvbmx5IHRoaXMgcnVsZShzKScsIGRlZmF1bHQ6IFsnKiddIH0pXG4gICAgLm9wdGlvbignZXhjbHVkZScsIHsgYWxpYXM6ICd4JywgdHlwZTogJ2FycmF5JywgZGVzYzogJ2RvIG5vdCBldmFsdWRhdGUgdGhlc2UgcnVsZXMgKHRha2VzIHByaW9yaXR5IG92ZXIgLS1pbmNsdWRlKScsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLm9wdGlvbignc2F2ZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAndXBkYXRlcyBwYWNrYWdlLmpzb24gd2l0aCBcImV4Y2x1ZGVcIiBzdGF0ZW1lbnRzIGZvciBhbGwgZmFpbGluZyBydWxlcycsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbigndmVyYm9zZScsIHsgYWxpYXM6ICd2JywgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAndmVyYm9zZSBvdXRwdXQgKHByaW50cyBhbGwgYXNzZXJ0aW9ucyknLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgIC5vcHRpb24oJ3F1aWV0JywgeyBhbGlhczogJ3EnLCB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICdxdWlldCBtb2RlIC0gc2hvd3Mgb25seSBlcnJvcnMnLCBkZWZhdWx0OiB0cnVlIH0pXG4gICAgLm9wdGlvbignZm9yY2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVzYzogJ3N1Y2NlZWQgc2lsZW50bHkgaWYgdGhpcyBpcyBub3QgYSBqc2lpIG1vZHVsZScsIGRlZmF1bHQ6IHRydWUgfSlcbiAgICAub3B0aW9uKCdjb25maWcnLCB7IHR5cGU6ICdib29sZWFuJywgZGVzYzogJ3JlYWRzIG9wdGlvbnMgZnJvbSB0aGUgXCJhd3NsaW50XCIgc2VjdGlvbiBpbiBwYWNrYWdlLmpzb24nLCBkZWZhdWx0OiB0cnVlIH0pXG4gICAgLm9wdGlvbignZGVidWcnLCB7IHR5cGU6ICdib29sZWFuJywgZGVzYzogJ2RlYnVnIG91dHB1dCcsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbignY29tcGlsZScsIHsgYWxpYXM6ICdjJywgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnYWx3YXlzIHJ1biB0aGUganNpaSBjb21waWxlciAodXNlIFwiLS1uby1jb21waWxlXCIgdG8gbmV2ZXIgcnVuIHRoZSBjb21waWxlciwgZXZlbiBpZiAuanNpaSBkb2VzblxcJ3QgZXhpc3QpJyB9KVxuICAgIC5ncm91cCgnaW5jbHVkZScsICdGaWx0ZXJpbmcnKVxuICAgIC5ncm91cCgnZXhjbHVkZScsICdGaWx0ZXJpbmcnKVxuICAgIC5ncm91cCgnY29uZmlnJywgJ0NvbmZpZ3VyYXRpb24nKVxuICAgIC5ncm91cCgnc2F2ZScsICdDb25maWd1cmF0aW9uJylcbiAgICAuZ3JvdXAoJ3ZlcmJvc2UnLCAnT3V0cHV0JylcbiAgICAuZ3JvdXAoJ3F1aWV0JywgJ091dHB1dCcpXG4gICAgLmdyb3VwKCdkZWJ1ZycsICdPdXRwdXQnKVxuICAgIC5ncm91cCgnY29tcGlsZScsICdCdWlsZCcpXG4gICAgLmV4YW1wbGUoJ2F3c2xpbnQnLCAnbGludHMgdGhlIGN1cnJlbnQgbW9kdWxlIGFnYWluc3QgYWxsIHJ1bGVzJylcbiAgICAuZXhhbXBsZSgnYXdzbGludCAtdiAtaSBcInJlc291cmNlKlwiIC1pIFwiaW1wb3J0KlwiJywgJ2xpbnRzIGFnYWluc3QgYWxsIHJ1bGVzIHRoYXQgc3RhcnQgd2l0aCBcInJlc291cmNlXCIgb3IgXCJpbXBvcnRcIiBhbmQgcHJpbnQgc3VjY2Vzc2VzJylcbiAgICAuZXhhbXBsZSgnYXdzbGludCAteCBcIio6QGF3cy1jZGsvYXdzLXMzKlwiJywgJ2V2YWx1YXRlIGFsbCBydWxlcyBpbiBhbGwgc2NvcGVzIGJlc2lkZXMgb25lcyB0aGF0IGJlZ2luIHdpdGggXCJAYXdzLWNkay9hd3MtczNcIicpXG4gICAgLmV4YW1wbGUoJ2F3c2xpbnQgLS1zYXZlJywgJ3VwZGF0ZWQgXCJwYWNrYWdlLmpzb25cIiB3aXRoIFwiZXhjbHVkZVwicyBmb3IgYWxsIGZhaWxpbmcgcnVsZXMnKTtcblxuICBpZiAoIXByb2Nlc3Muc3Rkb3V0LmlzVFRZKSB7XG4gICAgY29sb3JzLmRpc2FibGUoKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBhcmd2LmFyZ3Y7XG5cbiAgc3RhY2tUcmFjZSA9IGFyZ3MudmVyYm9zZSB8fCBhcmdzLmRlYnVnO1xuXG4gIGlmIChhcmdzLl8ubGVuZ3RoID4gMSkge1xuICAgIGFyZ3Yuc2hvd0hlbHAoKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBjb25zdCBjb21tYW5kID0gYXJncy5fWzBdIHx8ICdsaW50JztcbiAgY29uc3Qgd29ya2RpciA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgY29uc3QgY29uZmlnID0gcGF0aC5qb2luKHdvcmtkaXIsICdwYWNrYWdlLmpzb24nKTtcblxuICBpZiAoY29tbWFuZCA9PT0gJ2xpc3QnKSB7XG4gICAgZm9yIChjb25zdCBydWxlIG9mIEFMTF9SVUxFU19MSU5URVIucnVsZXMpIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhgJHtjb2xvcnMuY3lhbihydWxlLmNvZGUpfTogJHtydWxlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGlmIG5vIHBhY2thZ2UuanNvbiBhbmQgZm9yY2UgaXMgdHJ1ZSAoZGVmYXVsdCksIGp1c3QgZG9uJ3QgZG8gYW55dGhpbmdcbiAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKGNvbmZpZykgJiYgYXJncy5mb3JjZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBrZyA9IGF3YWl0IGZzLnJlYWRKU09OKGNvbmZpZyk7XG5cbiAgLy8gaWYgdGhpcyBpcyBub3QgYSBqc2lpIG1vZHVsZSB3ZSBoYXZlIG5vdGhpbmcgdG8gbG9vayBmb3JcbiAgaWYgKCFwa2cuanNpaSkge1xuICAgIGlmIChhcmdzLmZvcmNlKSB7XG4gICAgICByZXR1cm47IC8vIGp1c3Qgc2lsZW50bHkgc3VjY2VlZFxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgTW9kdWxlIGluICR7d29ya2Rpcn0gaXMgbm90IGEganNpaSBtb2R1bGUgKG5vIFwianNpaVwiIHNlY3Rpb24gaW4gcGFja2FnZS5qc29uKWApO1xuICB9XG5cbiAgLy8gaWYgcGFja2FnZS5qc29uIGNvbnRhaW5zIGEgYGpzaWlgIHNlY3Rpb24gYnV0IHRoZXJlIGlzIG5vIC5qc2lpIGZpbGVcbiAgLy8gaXQgbWVhbnMgd2UgaGF2ZW4ndCBjb21waWxlZCB0aGUgbW9kdWxlLlxuICBpZiAoYXdhaXQgc2hvdWxkQ29tcGlsZSgpKSB7XG4gICAgYXdhaXQgc2hlbGwoJ2pzaWknKTtcbiAgfVxuXG4gIC8vIHJlYWQgXCJhd3NsaW50XCIgZnJvbSBwYWNrYWdlLmpzb25cbiAgaWYgKGFyZ3MuY29uZmlnKSB7XG4gICAgbWVyZ2VPcHRpb25zKGFyZ3MsIHBrZy5hd3NsaW50KTtcbiAgfVxuXG4gIGlmIChhcmdzLmRlYnVnKSB7XG4gICAgY29uc29sZS5lcnJvcignY29tbWFuZDogJyArIGNvbW1hbmQpO1xuICAgIGNvbnNvbGUuZXJyb3IoJ29wdGlvbnM6ICcgKyBKU09OLnN0cmluZ2lmeShhcmdzLCB1bmRlZmluZWQsIDIpKTtcbiAgfVxuXG4gIGlmIChjb21tYW5kID09PSAnbGludCcpIHtcbiAgICBjb25zdCBhc3NlbWJseSA9IGF3YWl0IGxvYWRNb2R1bGUod29ya2Rpcik7XG4gICAgaWYgKCFhc3NlbWJseSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4Y2x1ZGVzVG9TYXZlID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBsZXQgZXJyb3JzID0gMDtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICAgIHJlc3VsdHMucHVzaCguLi5BTExfUlVMRVNfTElOVEVSLmV2YWwoYXNzZW1ibHksIHtcbiAgICAgIGluY2x1ZGU6IGFyZ3MuaW5jbHVkZSxcbiAgICAgIGV4Y2x1ZGU6IGFyZ3MuZXhjbHVkZSxcbiAgICB9KSk7XG5cbiAgICAvLyBTb3J0IGVycm9ycyB0byB0aGUgdG9wIChoaWdoZXN0IHNldmVyaXR5IGZpcnN0KVxuICAgIHJlc3VsdHMuc29ydCgoYSwgYikgPT4gYi5sZXZlbCAtIGEubGV2ZWwpO1xuXG4gICAgLy8gcHJvY2VzcyByZXN1bHRzXG5cbiAgICBmb3IgKGNvbnN0IGRpYWcgb2YgcmVzdWx0cykge1xuICAgICAgY29uc3Qgc3VwcHJlc3Npb25LZXkgPSBgJHtkaWFnLnJ1bGUuY29kZX06JHtkaWFnLnNjb3BlfWA7XG5cbiAgICAgIGxldCBjb2xvcjtcbiAgICAgIHN3aXRjaCAoZGlhZy5sZXZlbCkge1xuICAgICAgICBjYXNlIERpYWdub3N0aWNMZXZlbC5TdWNjZXNzOlxuICAgICAgICAgIGlmIChhcmdzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIGNvbG9yID0gY29sb3JzLmdyYXk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIERpYWdub3N0aWNMZXZlbC5FcnJvcjpcbiAgICAgICAgICBlcnJvcnMrKztcbiAgICAgICAgICBjb2xvciA9IGNvbG9ycy5yZWQ7XG4gICAgICAgICAgaWYgKGFyZ3Muc2F2ZSkge1xuICAgICAgICAgICAgZXhjbHVkZXNUb1NhdmUucHVzaChzdXBwcmVzc2lvbktleSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIERpYWdub3N0aWNMZXZlbC5XYXJuaW5nOlxuICAgICAgICAgIGlmICghYXJncy5xdWlldCkge1xuICAgICAgICAgICAgY29sb3IgPSBjb2xvcnMueWVsbG93O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBEaWFnbm9zdGljTGV2ZWwuU2tpcHBlZDpcbiAgICAgICAgICBpZiAoIWFyZ3MucXVpZXQpIHtcbiAgICAgICAgICAgIGNvbG9yID0gY29sb3JzLmJsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjb2xvcihgJHtEaWFnbm9zdGljTGV2ZWxbZGlhZy5sZXZlbF0udG9Mb3dlckNhc2UoKX06IFske2NvbG9ycy5ib2xkKGBhd3NsaW50OiR7ZGlhZy5ydWxlLmNvZGV9YCl9OiR7Y29sb3JzLmJvbGQoZGlhZy5zY29wZSl9XSAke2RpYWcubWVzc2FnZX1gKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4Y2x1ZGVzVG9TYXZlLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICghcGtnLmF3c2xpbnQpIHtcbiAgICAgICAgcGtnLmF3c2xpbnQgPSB7IH07XG4gICAgICB9XG5cbiAgICAgIGlmICghcGtnLmF3c2xpbnQuZXhjbHVkZSkge1xuICAgICAgICBwa2cuYXdzbGludC5leGNsdWRlID0gW107XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4Y2x1ZGVzOiBzdHJpbmdbXSA9IHBrZy5hd3NsaW50LmV4Y2x1ZGU7XG5cbiAgICAgIGZvciAoY29uc3QgZXhjbHVkZSBvZiBleGNsdWRlc1RvU2F2ZSkge1xuICAgICAgICBpZiAoZXhjbHVkZXMuaW5kZXhPZihleGNsdWRlKSA9PT0gLTEpIHtcbiAgICAgICAgICBleGNsdWRlcy5wdXNoKGV4Y2x1ZGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChleGNsdWRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlSlNPTihjb25maWcsIHBrZywgeyBzcGFjZXM6IDIgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycyAmJiAhYXJncy5zYXZlKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXJndi5zaG93SGVscCgpO1xuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29tbWFuZDogJHtjb21tYW5kfWApO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNob3VsZENvbXBpbGUoKSB7XG5cbiAgICAvLyBpZiAtLWNvbXBpbGUgaXMgZXhwbGljaXRseSBlbmFibGVkIHRoZW4ganVzdCBjb21waWxlIGFsd2F5c1xuICAgIGlmIChhcmdzLmNvbXBpbGUgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGhhdmUgYSAuanNpaSBmaWxlIGFuZCB3ZSBhcmUgbm90IGZvcmNlZCB0byBjb21waWxlLCB0aGVuIGRvbid0IGNvbXBpbGVcbiAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya2RpciwgJy5qc2lpJykpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gd2UgZG9uJ3QgaGF2ZSBhIC5qc2lpIGZpbGUsIGFuZCAtLW5vLWNvbXBpbGUgaXMgZXhwbGljaWx5IHNldCwgdGhlbiBpdCdzIGFuIGVycm9yXG4gICAgaWYgKGFyZ3MuY29tcGlsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gLmpzaWkgZmlsZSBhbmQgLS1uby1jb21waWxlIGlzIHNldCcpO1xuICAgIH1cblxuICAgIC8vIGNvbXBpbGUhXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxufVxuXG5tYWluKCkuY2F0Y2goZSA9PiB7XG4gIGNvbnNvbGUuZXJyb3IoY29sb3JzLnJlZChlLm1lc3NhZ2UpKTtcbiAgaWYgKHN0YWNrVHJhY2UpIHtcbiAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICB9XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkTW9kdWxlKGRpcjogc3RyaW5nKSB7XG4gIGNvbnN0IHRzID0gbmV3IHJlZmxlY3QuVHlwZVN5c3RlbSgpO1xuICBhd2FpdCB0cy5sb2FkKGRpciwgeyB2YWxpZGF0ZTogZmFsc2UgfSk7IC8vIERvbid0IHZhbGlkYXRlIHRvIHNhdmUgNjYlIG9mIGV4ZWN1dGlvbiB0aW1lICgyMHMgdnMgMW1pbikuXG4gIC8vIFdlIHJ1biAnYXdzbGludCcgZHVyaW5nIGJ1aWxkIHRpbWUsIGFzc2VtYmxpZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgb2suXG5cbiAgaWYgKHRzLnJvb3RzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0aW5nIG9ubHkgYSBzaW5nbGUgcm9vdCBhc3NlbWJseScpO1xuICB9XG5cbiAgcmV0dXJuIHRzLnJvb3RzWzBdO1xufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMoZGVzdDogYW55LCBwa2c/OiBhbnkpIHtcbiAgaWYgKCFwa2cpIHsgcmV0dXJuOyB9IC8vIG5vIG9wdGlvbnMgaW4gcGFja2FnZS5qc29uXG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGtnKSkge1xuXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBvcHRpb24sIHRoZW4gYWRkIHZhbHVlcyB0byBkZXN0aW5hdGlvblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgYXJyID0gZGVzdFtrZXldIHx8IFtdO1xuICAgICAgYXJyLnB1c2goLi4udmFsdWUpO1xuICAgICAgZGVzdFtrZXldID0gYXJyO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gb2JqZWN0cyBhcmUgbm90IGFsbG93ZWRcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9wdGlvbiBcIiR7a2V5fVwiIGluIHBhY2thZ2UuanNvbjogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgfVxuXG4gICAgLy8gcHJpbWl0aXZlcyBzaW1wbHkgb3ZlcnJpZGVcbiAgICBkZXN0W2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaGVsbChjb21tYW5kOiBzdHJpbmcpIHtcbiAgY29uc3QgY2hpbGQgPSBjaGlsZF9wcm9jZXNzLnNwYXduKGNvbW1hbmQsIFtdLCB7IHN0ZGlvOiBbJ2luaGVyaXQnLCAnaW5oZXJpdCcsICdpbmhlcml0J10gfSk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2ssIGtvKSA9PiB7XG4gICAgY2hpbGQub25jZSgnZXhpdCcsIChzdGF0dXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gb2soKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrbyhuZXcgRXJyb3IoYCR7Y29tbWFuZH0gZXhpdGVkIHdpdGggc3RhdHVzICR7c3RhdHVzfWApKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjaGlsZC5vbmNlKCdlcnJvcicsIGtvKTtcbiAgfSk7XG59XG4iXX0=
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzbGludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3c2xpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0QkFBNEI7QUFDNUIsK0JBQStCO0FBQy9CLCtDQUErQztBQUMvQyw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLCtCQUErQjtBQUMvQix3Q0FBd0M7QUFDeEMsK0JBQStCO0FBQy9CLGdDQUEyRDtBQUUzRCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFFdkIsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxJQUFJLEdBQUcsS0FBSztTQUNmLEdBQUcsQ0FBQyxTQUFTLENBQUM7U0FDZCxLQUFLLENBQUMsNkJBQTZCLENBQUM7U0FDcEMsY0FBYyxDQUFDLElBQUksQ0FBQztTQUNwQixPQUFPLENBQUMsSUFBSSxFQUFFLG1DQUFtQyxDQUFDO1NBQ2xELE9BQU8sQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUM7U0FDM0MsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsNEJBQTRCLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztTQUNwRyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSw4REFBOEQsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7U0FDbkksTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLHNFQUFzRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUNqSSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSx3Q0FBd0MsRUFBRSxPQUFPLEVBQUUsS0FBSyxF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QUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO1FBQzVCLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDakMsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNoQixPQUFPLEVBQUUsRUFBRSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsT0FBTyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxPQUFPLHVCQUF1QixNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDakU7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgcmVmbGVjdCBmcm9tICdqc2lpLXJlZmxlY3QnO1xuaW1wb3J0ICogYXMgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgQUxMX1JVTEVTX0xJTlRFUiwgRGlhZ25vc3RpY0xldmVsIH0gZnJvbSAnLi4vbGliJztcblxubGV0IHN0YWNrVHJhY2UgPSBmYWxzZTtcblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgYXJndiA9IHlhcmdzXG4gICAgLmVudignQVdTTElOVCcpXG4gICAgLnVzYWdlKCdhd3NsaW50IFtvcHRpb25zXSBbY29tbWFuZF0nKVxuICAgIC5zaG93SGVscE9uRmFpbCh0cnVlKVxuICAgIC5jb21tYW5kKCckMCcsICdsaW50IHRoZSBjdXJyZW50IG1vZHVsZSAoZGVmYXVsdCknKVxuICAgIC5jb21tYW5kKCdsaXN0JywgJ2xpc3QgYWxsIGF2YWlsYWJsZSBydWxlcycpXG4gICAgLm9wdGlvbignaW5jbHVkZScsIHsgYWxpYXM6ICdpJywgdHlwZTogJ2FycmF5JywgZGVzYzogJ2V2YWx1YXRlIG9ubHkgdGhpcyBydWxlKHMpJywgZGVmYXVsdDogWycqJ10gfSlcbiAgICAub3B0aW9uKCdleGNsdWRlJywgeyBhbGlhczogJ3gnLCB0eXBlOiAnYXJyYXknLCBkZXNjOiAnZG8gbm90IGV2YWx1ZGF0ZSB0aGVzZSBydWxlcyAodGFrZXMgcHJpb3JpdHkgb3ZlciAtLWluY2x1ZGUpJywgZGVmYXVsdDogW10gfSlcbiAgICAub3B0aW9uKCdzYXZlJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICd1cGRhdGVzIHBhY2thZ2UuanNvbiB3aXRoIFwiZXhjbHVkZVwiIHN0YXRlbWVudHMgZm9yIGFsbCBmYWlsaW5nIHJ1bGVzJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAub3B0aW9uKCd2ZXJib3NlJywgeyBhbGlhczogJ3YnLCB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICd2ZXJib3NlIG91dHB1dCAocHJpbnRzIGFsbCBhc3NlcnRpb25zKScsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbigncXVpZXQnLCB7IGFsaWFzOiAncScsIHR5cGU6ICdib29sZWFuJywgZGVzYzogJ3F1aWV0IG1vZGUgLSBzaG93cyBvbmx5IGVycm9ycycsIGRlZmF1bHQ6IHRydWUgfSlcbiAgICAub3B0aW9uKCdmb3JjZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnc3VjY2VlZCBzaWxlbnRseSBpZiB0aGlzIGlzIG5vdCBhIGpzaWkgbW9kdWxlJywgZGVmYXVsdDogdHJ1ZSB9KVxuICAgIC5vcHRpb24oJ2NvbmZpZycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAncmVhZHMgb3B0aW9ucyBmcm9tIHRoZSBcImF3c2xpbnRcIiBzZWN0aW9uIGluIHBhY2thZ2UuanNvbicsIGRlZmF1bHQ6IHRydWUgfSlcbiAgICAub3B0aW9uKCdkZWJ1ZycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZXNjOiAnZGVidWcgb3V0cHV0JywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAub3B0aW9uKCdjb21waWxlJywgeyBhbGlhczogJ2MnLCB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICdhbHdheXMgcnVuIHRoZSBqc2lpIGNvbXBpbGVyICh1c2UgXCItLW5vLWNvbXBpbGVcIiB0byBuZXZlciBydW4gdGhlIGNvbXBpbGVyLCBldmVuIGlmIC5qc2lpIGRvZXNuXFwndCBleGlzdCknIH0pXG4gICAgLmdyb3VwKCdpbmNsdWRlJywgJ0ZpbHRlcmluZycpXG4gICAgLmdyb3VwKCdleGNsdWRlJywgJ0ZpbHRlcmluZycpXG4gICAgLmdyb3VwKCdjb25maWcnLCAnQ29uZmlndXJhdGlvbicpXG4gICAgLmdyb3VwKCdzYXZlJywgJ0NvbmZpZ3VyYXRpb24nKVxuICAgIC5ncm91cCgndmVyYm9zZScsICdPdXRwdXQnKVxuICAgIC5ncm91cCgncXVpZXQnLCAnT3V0cHV0JylcbiAgICAuZ3JvdXAoJ2RlYnVnJywgJ091dHB1dCcpXG4gICAgLmdyb3VwKCdjb21waWxlJywgJ0J1aWxkJylcbiAgICAuZXhhbXBsZSgnYXdzbGludCcsICdsaW50cyB0aGUgY3VycmVudCBtb2R1bGUgYWdhaW5zdCBhbGwgcnVsZXMnKVxuICAgIC5leGFtcGxlKCdhd3NsaW50IC12IC1pIFwicmVzb3VyY2UqXCIgLWkgXCJpbXBvcnQqXCInLCAnbGludHMgYWdhaW5zdCBhbGwgcnVsZXMgdGhhdCBzdGFydCB3aXRoIFwicmVzb3VyY2VcIiBvciBcImltcG9ydFwiIGFuZCBwcmludCBzdWNjZXNzZXMnKVxuICAgIC5leGFtcGxlKCdhd3NsaW50IC14IFwiKjpAYXdzLWNkay9hd3MtczMqXCInLCAnZXZhbHVhdGUgYWxsIHJ1bGVzIGluIGFsbCBzY29wZXMgYmVzaWRlcyBvbmVzIHRoYXQgYmVnaW4gd2l0aCBcIkBhd3MtY2RrL2F3cy1zM1wiJylcbiAgICAuZXhhbXBsZSgnYXdzbGludCAtLXNhdmUnLCAndXBkYXRlZCBcInBhY2thZ2UuanNvblwiIHdpdGggXCJleGNsdWRlXCJzIGZvciBhbGwgZmFpbGluZyBydWxlcycpO1xuXG4gIGlmICghcHJvY2Vzcy5zdGRvdXQuaXNUVFkpIHtcbiAgICAvLyBEaXNhYmxlIGNoYWxrIGNvbG9yIGhpZ2hsaWdodGluZ1xuICAgIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID0gJzAnO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IGFyZ3YuYXJndjtcblxuICBzdGFja1RyYWNlID0gYXJncy52ZXJib3NlIHx8IGFyZ3MuZGVidWc7XG5cbiAgaWYgKGFyZ3MuXy5sZW5ndGggPiAxKSB7XG4gICAgYXJndi5zaG93SGVscCgpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1hbmQgPSBhcmdzLl9bMF0gfHwgJ2xpbnQnO1xuICBjb25zdCB3b3JrZGlyID0gcHJvY2Vzcy5jd2QoKTtcblxuICBjb25zdCBjb25maWcgPSBwYXRoLmpvaW4od29ya2RpciwgJ3BhY2thZ2UuanNvbicpO1xuXG4gIGlmIChjb21tYW5kID09PSAnbGlzdCcpIHtcbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgQUxMX1JVTEVTX0xJTlRFUi5ydWxlcykge1xuICAgICAgY29uc29sZS5pbmZvKGAke2NoYWxrLmN5YW4ocnVsZS5jb2RlKX06ICR7cnVsZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBpZiBubyBwYWNrYWdlLmpzb24gYW5kIGZvcmNlIGlzIHRydWUgKGRlZmF1bHQpLCBqdXN0IGRvbid0IGRvIGFueXRoaW5nXG4gIGlmICghYXdhaXQgZnMucGF0aEV4aXN0cyhjb25maWcpICYmIGFyZ3MuZm9yY2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwa2cgPSBhd2FpdCBmcy5yZWFkSlNPTihjb25maWcpO1xuXG4gIC8vIGlmIHRoaXMgaXMgbm90IGEganNpaSBtb2R1bGUgd2UgaGF2ZSBub3RoaW5nIHRvIGxvb2sgZm9yXG4gIGlmICghcGtnLmpzaWkpIHtcbiAgICBpZiAoYXJncy5mb3JjZSkge1xuICAgICAgcmV0dXJuOyAvLyBqdXN0IHNpbGVudGx5IHN1Y2NlZWRcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZHVsZSBpbiAke3dvcmtkaXJ9IGlzIG5vdCBhIGpzaWkgbW9kdWxlIChubyBcImpzaWlcIiBzZWN0aW9uIGluIHBhY2thZ2UuanNvbilgKTtcbiAgfVxuXG4gIC8vIGlmIHBhY2thZ2UuanNvbiBjb250YWlucyBhIGBqc2lpYCBzZWN0aW9uIGJ1dCB0aGVyZSBpcyBubyAuanNpaSBmaWxlXG4gIC8vIGl0IG1lYW5zIHdlIGhhdmVuJ3QgY29tcGlsZWQgdGhlIG1vZHVsZS5cbiAgaWYgKGF3YWl0IHNob3VsZENvbXBpbGUoKSkge1xuICAgIGF3YWl0IHNoZWxsKCdqc2lpJyk7XG4gIH1cblxuICAvLyByZWFkIFwiYXdzbGludFwiIGZyb20gcGFja2FnZS5qc29uXG4gIGlmIChhcmdzLmNvbmZpZykge1xuICAgIG1lcmdlT3B0aW9ucyhhcmdzLCBwa2cuYXdzbGludCk7XG4gIH1cblxuICBpZiAoYXJncy5kZWJ1Zykge1xuICAgIGNvbnNvbGUuZXJyb3IoJ2NvbW1hbmQ6ICcgKyBjb21tYW5kKTtcbiAgICBjb25zb2xlLmVycm9yKCdvcHRpb25zOiAnICsgSlNPTi5zdHJpbmdpZnkoYXJncywgdW5kZWZpbmVkLCAyKSk7XG4gIH1cblxuICBpZiAoY29tbWFuZCA9PT0gJ2xpbnQnKSB7XG4gICAgY29uc3QgYXNzZW1ibHkgPSBhd2FpdCBsb2FkTW9kdWxlKHdvcmtkaXIpO1xuICAgIGlmICghYXNzZW1ibHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleGNsdWRlc1RvU2F2ZSA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgbGV0IGVycm9ycyA9IDA7XG5cbiAgICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgICByZXN1bHRzLnB1c2goLi4uQUxMX1JVTEVTX0xJTlRFUi5ldmFsKGFzc2VtYmx5LCB7XG4gICAgICBpbmNsdWRlOiBhcmdzLmluY2x1ZGUsXG4gICAgICBleGNsdWRlOiBhcmdzLmV4Y2x1ZGUsXG4gICAgfSkpO1xuXG4gICAgLy8gU29ydCBlcnJvcnMgdG8gdGhlIHRvcCAoaGlnaGVzdCBzZXZlcml0eSBmaXJzdClcbiAgICByZXN1bHRzLnNvcnQoKGEsIGIpID0+IGIubGV2ZWwgLSBhLmxldmVsKTtcblxuICAgIC8vIHByb2Nlc3MgcmVzdWx0c1xuXG4gICAgZm9yIChjb25zdCBkaWFnIG9mIHJlc3VsdHMpIHtcbiAgICAgIGNvbnN0IHN1cHByZXNzaW9uS2V5ID0gYCR7ZGlhZy5ydWxlLmNvZGV9OiR7ZGlhZy5zY29wZX1gO1xuXG4gICAgICBsZXQgY29sb3I7XG4gICAgICBzd2l0Y2ggKGRpYWcubGV2ZWwpIHtcbiAgICAgICAgY2FzZSBEaWFnbm9zdGljTGV2ZWwuU3VjY2VzczpcbiAgICAgICAgICBpZiAoYXJncy52ZXJib3NlKSB7XG4gICAgICAgICAgICBjb2xvciA9IGNoYWxrLmdyYXk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIERpYWdub3N0aWNMZXZlbC5FcnJvcjpcbiAgICAgICAgICBlcnJvcnMrKztcbiAgICAgICAgICBjb2xvciA9IGNoYWxrLnJlZDtcbiAgICAgICAgICBpZiAoYXJncy5zYXZlKSB7XG4gICAgICAgICAgICBleGNsdWRlc1RvU2F2ZS5wdXNoKHN1cHByZXNzaW9uS2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRGlhZ25vc3RpY0xldmVsLldhcm5pbmc6XG4gICAgICAgICAgaWYgKCFhcmdzLnF1aWV0KSB7XG4gICAgICAgICAgICBjb2xvciA9IGNoYWxrLnllbGxvdztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRGlhZ25vc3RpY0xldmVsLlNraXBwZWQ6XG4gICAgICAgICAgaWYgKCFhcmdzLnF1aWV0KSB7XG4gICAgICAgICAgICBjb2xvciA9IGNoYWxrLmJsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjb2xvcihgJHtEaWFnbm9zdGljTGV2ZWxbZGlhZy5sZXZlbF0udG9Mb3dlckNhc2UoKX06IFske2NoYWxrLmJvbGQoYGF3c2xpbnQ6JHtkaWFnLnJ1bGUuY29kZX1gKX06JHtjaGFsay5ib2xkKGRpYWcuc2NvcGUpfV0gJHtkaWFnLm1lc3NhZ2V9YCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleGNsdWRlc1RvU2F2ZS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIXBrZy5hd3NsaW50KSB7XG4gICAgICAgIHBrZy5hd3NsaW50ID0geyB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXBrZy5hd3NsaW50LmV4Y2x1ZGUpIHtcbiAgICAgICAgcGtnLmF3c2xpbnQuZXhjbHVkZSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleGNsdWRlczogc3RyaW5nW10gPSBwa2cuYXdzbGludC5leGNsdWRlO1xuXG4gICAgICBmb3IgKGNvbnN0IGV4Y2x1ZGUgb2YgZXhjbHVkZXNUb1NhdmUpIHtcbiAgICAgICAgaWYgKGV4Y2x1ZGVzLmluZGV4T2YoZXhjbHVkZSkgPT09IC0xKSB7XG4gICAgICAgICAgZXhjbHVkZXMucHVzaChleGNsdWRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXhjbHVkZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCBmcy53cml0ZUpTT04oY29uZmlnLCBwa2csIHsgc3BhY2VzOiAyIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlcnJvcnMgJiYgIWFyZ3Muc2F2ZSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGFyZ3Yuc2hvd0hlbHAoKTtcbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvbW1hbmQ6ICR7Y29tbWFuZH1gKTtcblxuICBhc3luYyBmdW5jdGlvbiBzaG91bGRDb21waWxlKCkge1xuXG4gICAgLy8gaWYgLS1jb21waWxlIGlzIGV4cGxpY2l0bHkgZW5hYmxlZCB0aGVuIGp1c3QgY29tcGlsZSBhbHdheXNcbiAgICBpZiAoYXJncy5jb21waWxlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlIGEgLmpzaWkgZmlsZSBhbmQgd2UgYXJlIG5vdCBmb3JjZWQgdG8gY29tcGlsZSwgdGhlbiBkb24ndCBjb21waWxlXG4gICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtkaXIsICcuanNpaScpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIHdlIGRvbid0IGhhdmUgYSAuanNpaSBmaWxlLCBhbmQgLS1uby1jb21waWxlIGlzIGV4cGxpY2lseSBzZXQsIHRoZW4gaXQncyBhbiBlcnJvclxuICAgIGlmIChhcmdzLmNvbXBpbGUgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIC5qc2lpIGZpbGUgYW5kIC0tbm8tY29tcGlsZSBpcyBzZXQnKTtcbiAgICB9XG5cbiAgICAvLyBjb21waWxlIVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbn1cblxubWFpbigpLmNhdGNoKGUgPT4ge1xuICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChlLm1lc3NhZ2UpKTtcbiAgaWYgKHN0YWNrVHJhY2UpIHtcbiAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICB9XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkTW9kdWxlKGRpcjogc3RyaW5nKSB7XG4gIGNvbnN0IHRzID0gbmV3IHJlZmxlY3QuVHlwZVN5c3RlbSgpO1xuICBhd2FpdCB0cy5sb2FkKGRpciwgeyB2YWxpZGF0ZTogZmFsc2UgfSk7IC8vIERvbid0IHZhbGlkYXRlIHRvIHNhdmUgNjYlIG9mIGV4ZWN1dGlvbiB0aW1lICgyMHMgdnMgMW1pbikuXG4gIC8vIFdlIHJ1biAnYXdzbGludCcgZHVyaW5nIGJ1aWxkIHRpbWUsIGFzc2VtYmxpZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgb2suXG5cbiAgaWYgKHRzLnJvb3RzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0aW5nIG9ubHkgYSBzaW5nbGUgcm9vdCBhc3NlbWJseScpO1xuICB9XG5cbiAgcmV0dXJuIHRzLnJvb3RzWzBdO1xufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMoZGVzdDogYW55LCBwa2c/OiBhbnkpIHtcbiAgaWYgKCFwa2cpIHsgcmV0dXJuOyB9IC8vIG5vIG9wdGlvbnMgaW4gcGFja2FnZS5qc29uXG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGtnKSkge1xuXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBhcnJheSBvcHRpb24sIHRoZW4gYWRkIHZhbHVlcyB0byBkZXN0aW5hdGlvblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgYXJyID0gZGVzdFtrZXldIHx8IFtdO1xuICAgICAgYXJyLnB1c2goLi4udmFsdWUpO1xuICAgICAgZGVzdFtrZXldID0gYXJyO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gb2JqZWN0cyBhcmUgbm90IGFsbG93ZWRcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9wdGlvbiBcIiR7a2V5fVwiIGluIHBhY2thZ2UuanNvbjogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgfVxuXG4gICAgLy8gcHJpbWl0aXZlcyBzaW1wbHkgb3ZlcnJpZGVcbiAgICBkZXN0W2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaGVsbChjb21tYW5kOiBzdHJpbmcpIHtcbiAgY29uc3QgY2hpbGQgPSBjaGlsZF9wcm9jZXNzLnNwYXduKGNvbW1hbmQsIFtdLCB7IHN0ZGlvOiBbJ2luaGVyaXQnLCAnaW5oZXJpdCcsICdpbmhlcml0J10gfSk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2ssIGtvKSA9PiB7XG4gICAgY2hpbGQub25jZSgnZXhpdCcsIChzdGF0dXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gb2soKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrbyhuZXcgRXJyb3IoYCR7Y29tbWFuZH0gZXhpdGVkIHdpdGggc3RhdHVzICR7c3RhdHVzfWApKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjaGlsZC5vbmNlKCdlcnJvcicsIGtvKTtcbiAgfSk7XG59XG4iXX0=
package/bin/awslint.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  /* eslint-disable no-console */
3
3
  import * as child_process from 'child_process';
4
4
  import * as path from 'path';
5
- import * as colors from 'colors';
5
+ import * as chalk from 'chalk';
6
6
  import * as fs from 'fs-extra';
7
7
  import * as reflect from 'jsii-reflect';
8
8
  import * as yargs from 'yargs';
@@ -40,7 +40,8 @@ async function main() {
40
40
  .example('awslint --save', 'updated "package.json" with "exclude"s for all failing rules');
41
41
 
42
42
  if (!process.stdout.isTTY) {
43
- colors.disable();
43
+ // Disable chalk color highlighting
44
+ process.env.FORCE_COLOR = '0';
44
45
  }
45
46
 
46
47
  const args = argv.argv;
@@ -59,7 +60,7 @@ async function main() {
59
60
 
60
61
  if (command === 'list') {
61
62
  for (const rule of ALL_RULES_LINTER.rules) {
62
- console.info(`${colors.cyan(rule.code)}: ${rule.message}`);
63
+ console.info(`${chalk.cyan(rule.code)}: ${rule.message}`);
63
64
  }
64
65
  return;
65
66
  }
@@ -124,30 +125,30 @@ async function main() {
124
125
  switch (diag.level) {
125
126
  case DiagnosticLevel.Success:
126
127
  if (args.verbose) {
127
- color = colors.gray;
128
+ color = chalk.gray;
128
129
  }
129
130
  break;
130
131
  case DiagnosticLevel.Error:
131
132
  errors++;
132
- color = colors.red;
133
+ color = chalk.red;
133
134
  if (args.save) {
134
135
  excludesToSave.push(suppressionKey);
135
136
  }
136
137
  break;
137
138
  case DiagnosticLevel.Warning:
138
139
  if (!args.quiet) {
139
- color = colors.yellow;
140
+ color = chalk.yellow;
140
141
  }
141
142
  break;
142
143
  case DiagnosticLevel.Skipped:
143
144
  if (!args.quiet) {
144
- color = colors.blue;
145
+ color = chalk.blue;
145
146
  }
146
147
  break;
147
148
  }
148
149
 
149
150
  if (color) {
150
- console.error(color(`${DiagnosticLevel[diag.level].toLowerCase()}: [${colors.bold(`awslint:${diag.rule.code}`)}:${colors.bold(diag.scope)}] ${diag.message}`));
151
+ console.error(color(`${DiagnosticLevel[diag.level].toLowerCase()}: [${chalk.bold(`awslint:${diag.rule.code}`)}:${chalk.bold(diag.scope)}] ${diag.message}`));
151
152
  }
152
153
  }
153
154
 
@@ -207,7 +208,7 @@ async function main() {
207
208
  }
208
209
 
209
210
  main().catch(e => {
210
- console.error(colors.red(e.message));
211
+ console.error(chalk.red(e.message));
211
212
  if (stackTrace) {
212
213
  console.error(e.stack);
213
214
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "awslint",
3
- "version": "2.3.0",
3
+ "version": "2.7.0",
4
4
  "description": "Enforces the AWS Construct Library guidelines",
5
5
  "scripts": {
6
6
  "build": "tsc -b && eslint . --ext=.ts && pkglint && chmod +x bin/awslint",
@@ -18,28 +18,28 @@
18
18
  "awslint": "bin/awslint"
19
19
  },
20
20
  "dependencies": {
21
- "@jsii/spec": "^1.47.0",
22
- "camelcase": "^6.2.1",
23
- "colors": "^1.4.0",
21
+ "@jsii/spec": "^1.50.0",
22
+ "camelcase": "^6.3.0",
23
+ "chalk": "^4",
24
24
  "fs-extra": "^9.1.0",
25
- "jsii-reflect": "^1.47.0",
25
+ "jsii-reflect": "^1.50.0",
26
26
  "yargs": "^16.2.0"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@types/fs-extra": "^8.1.2",
30
- "@types/jest": "^27.0.3",
30
+ "@types/jest": "^27.4.0",
31
31
  "@types/yargs": "^15.0.14",
32
- "@aws-cdk/pkglint": "2.3.0",
32
+ "@aws-cdk/pkglint": "2.7.0",
33
33
  "typescript": "~3.9.10",
34
34
  "@typescript-eslint/eslint-plugin": "^4.33.0",
35
35
  "@typescript-eslint/parser": "^4.33.0",
36
36
  "eslint": "^7.32.0",
37
37
  "eslint-import-resolver-node": "^0.3.6",
38
38
  "eslint-import-resolver-typescript": "^2.5.0",
39
- "@aws-cdk/eslint-plugin": "2.3.0",
40
- "eslint-plugin-import": "^2.25.3",
39
+ "@aws-cdk/eslint-plugin": "2.7.0",
40
+ "eslint-plugin-import": "^2.25.4",
41
41
  "eslint-plugin-jest": "^24.7.0",
42
- "jest": "^27.4.3"
42
+ "jest": "^27.4.7"
43
43
  },
44
44
  "repository": {
45
45
  "type": "git",