arkit
Version:
Visualises JavaScript, TypeScript and Flow codebases as meaningful and committable architecture diagrams
67 lines (66 loc) • 2.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("./utils");
const config_1 = require("./config");
const parser_1 = require("./parser");
const generator_1 = require("./generator");
const types_1 = require("./types");
const cli_1 = require("./cli");
const ProgressBar = require("progress");
const puml_1 = require("./puml");
const converter_1 = require("./converter");
const getOptions = (options) => {
const opts = Object.assign(Object.assign({}, cli_1.cli.argv), options);
opts.directory = utils_1.getAbsolute(opts.directory);
if (opts.first) {
opts.first = utils_1.convertToRelative(opts.first, opts.directory);
}
if (opts.output) {
opts.output = utils_1.convertToRelative(opts.output, opts.directory, Object.values(types_1.OutputFormat));
}
if (opts.exclude) {
opts.exclude = utils_1.convertToRelative(opts.exclude, opts.directory);
}
return opts;
};
exports.getConfig = (options) => {
const opts = getOptions(options);
utils_1.info("Options");
utils_1.info(opts);
return new config_1.Config(opts);
};
exports.getOutputs = (config) => {
const files = new parser_1.Parser(config).parse();
utils_1.trace("Parsed files");
utils_1.trace(files);
const outputs = config.final.output;
const generator = new generator_1.Generator(config, files);
const converter = new converter_1.Converter(config);
const total = outputs.reduce((total, output) => total + utils_1.array(output.path).length, outputs.length * 2);
const progress = new ProgressBar("Generating :bar", {
total,
clear: true,
width: process.stdout.columns
});
return Promise.all(outputs.reduce((promises, output) => {
const layers = generator.generate(output);
progress.tick();
const puml = new puml_1.PUML().from(output, layers);
progress.tick();
const paths = utils_1.array(output.path);
for (const path of paths) {
const promise = converter.convert(path, puml).then(value => {
progress.tick();
return value;
});
promises.push(promise);
}
return promises;
}, []));
};
exports.arkit = (options) => {
const config = exports.getConfig(options);
utils_1.info("Config");
utils_1.info(config);
return exports.getOutputs(config);
};