UNPKG

bobflux-gen

Version:

Generator for monkey files in bobflux application.

60 lines (59 loc) 2.1 kB
"use strict"; function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } var ts = require("typescript"); var pathPlatformDependent = require("path"); var bv = require("./visitors/bfgVisitor"); __export(require("./visitors/bfgVisitor")); var path = pathPlatformDependent.posix; // This works everythere, just use forward slashes exports.resolvePathStringLiteral = (function (nn) { return path.join(path.dirname(nn.getSourceFile().path), nn.text); }); exports.create = function (logger) { return { getSourceData: function (source, tc) { var result = { sourceFile: source, sourceDeps: {}, filePath: null, fileName: null, states: [], imports: [], enums: [], customTypes: [], }; var bvVisitor = bv.createAllBfgVisitors(function () { return result; }); function visit(n, deepness) { logger.debug("" + ' '.repeat(deepness) + ts.SyntaxKind[n.kind] + ": " + n.getText().substr(0, 70)); bvVisitor.accept(n) && bvVisitor.visit(n); ts.forEachChild(n, function (node) { return visit(node, deepness + 1); }); } visit(source, 0); updateSourceDeps(result); logger.debug('Source result: ', result); return result; } }; }; function updateSourceDeps(data) { data.imports.forEach(function (i) { if (i.prefix) data.sourceDeps[i.prefix] = i; else i.prefix = createUnusedAlias(path.basename(i.relativePath), data.imports); i.types.forEach(function (t) { data.sourceDeps[t.targetType] = i; }); }); } function createUnusedAlias(key, imports) { var counter = 1; var keyBase = key.replace(/\W/g, '_'); key = keyBase; while (imports.find(function (i) { return i.prefix === key; })) { key = keyBase + counter++; } return key; } exports.createUnusedAlias = createUnusedAlias;