bobflux-gen
Version:
Generator for monkey files in bobflux application.
60 lines (59 loc) • 2.1 kB
JavaScript
;
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;