|
|
- var through = require('through');
- var Visitor = require('./visitor');
- var recast = require('recast');
- var types = recast.types;
-
- /**
- * Transform an Esprima AST generated from ES6 by replacing all template string
- * nodes with the equivalent ES5.
- *
- * NOTE: The argument may be modified by this function. To prevent modification
- * of your AST, pass a copy instead of a direct reference:
- *
- * // instead of transform(ast), pass a copy
- * transform(JSON.parse(JSON.stringify(ast));
- *
- * @param {Object} ast
- * @return {Object}
- */
- function transform(ast) {
- return types.visit(ast, Visitor.visitor);
- }
-
- /**
- * Transform JavaScript written using ES6 by replacing all template string
- * usages with the equivalent ES5.
- *
- * compile('`Hey, ${name}!'); // '"Hey, " + name + "!"'
- *
- * @param {string} source
- * @param {{sourceFileName: string, sourceMapName: string}} mapOptions
- * @return {string}
- */
- function compile(source, mapOptions) {
- mapOptions = mapOptions || {};
-
- var recastOptions = {
- sourceFileName: mapOptions.sourceFileName,
- sourceMapName: mapOptions.sourceMapName
- };
-
- var ast = recast.parse(source, recastOptions);
- return recast.print(transform(ast), recastOptions);
- }
-
- module.exports = function() {
- var data = '';
- return through(write, end);
-
- function write(buf) { data += buf; }
- function end() {
- this.queue(module.exports.compile(data).code);
- this.queue(null);
- }
- };
-
- module.exports.compile = compile;
- module.exports.transform = transform;
|