karma-typescript-es6-transform
Version:
Plugin for transforming ES2015 javascript code to to ES5 syntax.
79 lines • 2.69 kB
JavaScript
;
var babel = require("@babel/core");
var acorn = require("acorn");
var log4js = require("log4js");
var log;
var walk;
var isEs6 = function (ast) {
var es6NodeFound = false;
if (ast.body) {
var visitNode = function (node, state, c) {
if (!es6NodeFound) {
walk.base[node.type](node, state, c);
switch (node.type) {
case "ArrowFunctionExpression":
case "ClassDeclaration":
case "ExportAllDeclaration":
case "ExportDefaultDeclaration":
case "ExportNamedDeclaration":
case "ImportDeclaration":
es6NodeFound = true;
break;
case "VariableDeclaration":
if (node.kind === "const" || node.kind === "let") {
es6NodeFound = true;
}
break;
default:
}
}
};
walk.recursive(ast, null, {
Expression: visitNode,
Statement: visitNode
});
}
return es6NodeFound;
};
var configure = function (options) {
options = options || {};
if (!options.presets || options.presets.length === 0) {
options.presets = [["@babel/preset-env"]];
}
var transform = function (context, callback) {
if (!context.js) {
return callback(undefined, false);
}
if (isEs6(context.js.ast)) {
options.filename = context.filename;
log.debug("Transforming %s", options.filename);
try {
context.source = babel.transform(context.source, options).code;
context.js.ast = acorn.parse(context.source, { sourceType: "module", ecmaVersion: "latest" });
return callback(undefined, true);
}
catch (error) {
return callback(error, false);
}
}
else {
return callback(undefined, false);
}
};
var initialize = function (logOptions) {
log4js.configure({
appenders: logOptions.appenders,
categories: {
default: {
appenders: Object.keys(logOptions.appenders),
level: logOptions.level
}
}
});
log = log4js.getLogger("es6-transform.karma-typescript");
walk = require("acorn-walk");
};
return Object.assign(transform, { initialize: initialize });
};
module.exports = configure;
//# sourceMappingURL=transform.js.map