aws-iam-policy-tool
Version:
AWS IAM role/policy management cli tool
69 lines (68 loc) • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const stream_1 = require("stream");
class ConsoleResultWriter extends stream_1.Writable {
constructor(opts = {}) {
super({ objectMode: true });
const opts_ = opts || {};
this._plain = opts_['plain'] || false;
if (this._plain) {
this._statusStrMap = {
OK: ' [OK] ',
NG: ' [NG] ',
Skip: '[Skip]',
};
}
else {
this._statusStrMap = {
OK: ' \x1b[32mOK\x1b[0m ',
NG: ' \x1b[31mNG\x1b[0m ',
Skip: '\x1b[36mSkip\x1b[0m',
};
}
}
_write(result, _, cb) {
const st = this._statusStrMap[result.status];
expandMessage(result, !this._plain);
let str = `${st} ${result.message}`;
if (result.diff)
str += `\n${result.diff}`;
process.stdout.write(`${str}\n`);
cb();
}
}
exports.ConsoleResultWriter = ConsoleResultWriter;
class JSONResultWriter extends stream_1.Writable {
constructor(opts) {
super({ objectMode: true });
}
_write(result, _, cb) {
expandMessage(result, false);
process.stdout.write(JSON.stringify(result) + '\n');
cb();
}
}
exports.JSONResultWriter = JSONResultWriter;
function expandMessage(result, bold) {
const { message, target } = result;
result.message = message.replace(/\%(\d)/g, function (match, p1) {
let v;
if (target instanceof Array) {
v = target[Number(p1) - 1];
}
else {
v = target;
}
if (bold)
v = `\x1b[1m${v}\x1b[0m`;
return v;
});
}
function createWriter(opts = {}) {
if (opts.writer)
return opts.writer;
return opts.json
? new JSONResultWriter()
: new ConsoleResultWriter({ plain: opts.plain });
}
exports.createWriter = createWriter;