autouml
Version:
Autogenerate UML diagrams using d2
90 lines (89 loc) • 3.42 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildUML = void 0;
var ts = __importStar(require("typescript"));
var errors_1 = require("./errors");
var FileMapper_1 = require("../ast/FileMapper");
var codegen_1 = require("../d2/codegen");
var fs = __importStar(require("fs"));
var path = __importStar(require("path"));
var util = __importStar(require("node:util"));
var VERBOSE = false;
function verbose(msg) {
if (VERBOSE) {
console.log(msg);
}
}
function inspect(a) {
return util.inspect(a, false, null);
}
function tsconfigOptions(options) {
var tsconfigName = ts.findConfigFile(options.baseDir, ts.sys.fileExists, options.tsconfigFileName);
if (tsconfigName === undefined) {
throw new errors_1.tsconfigFileNotFoundError(options.baseDir, options.tsconfigFileName);
}
var configFile = ts.readConfigFile(tsconfigName, ts.sys.readFile);
var compilerOptions = ts.parseJsonConfigFileContent(configFile.config, ts.sys, "./");
return compilerOptions;
}
function buildUML(options) {
if (options.verbose) {
VERBOSE = true;
}
//find tsconfig
verbose("Finding tsconfig");
var tsconfig = tsconfigOptions(options);
verbose("Found tsconfig");
// get map of the project
verbose("Constructing mapper");
// TODO: dont hardcode this
var mapper = new FileMapper_1.FileMapper(
// [
// ...tsconfig.fileNames,
// `${options.baseDir}/typings/**.ts`,
// ],
tsconfig, options);
verbose("Mapping files");
var _a = mapper.mapFiles(), programMap = _a[0], programConnectors = _a[1];
// verbose(inspect(mapper.getRelations()));
// compile to target
verbose("Selecting code generator");
var visitor;
switch (options.target) {
default:
visitor = new codegen_1.d2Codegen();
}
// write to file
verbose("Generating code");
var code = visitor.visit(programMap, programConnectors);
verbose("Writing code to ".concat(path.resolve(options.outPath)));
fs.writeFileSync(options.outPath, code);
if (options.debugASTPath !== "") {
verbose("Writing AST to ".concat(path.resolve(options.debugASTPath)));
fs.writeFileSync(options.debugASTPath, "// SCOPES\n".concat(inspect(programMap), "\n// CONNECTIONS\n").concat(inspect(programConnectors)));
}
}
exports.buildUML = buildUML;