// Copyright 2014 Traceur Authors. // // Licensed under the Apache License, Version 2.0 (the “License”); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an “AS IS” BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License.

// Node.js API // // This is what you get when you `require('traceur')`. // It's suppose to be used by custom scripts or tools such as Grunt or Karma.

'use strict';

var path = require('path'); var fs = require('fs'); var util = require('./file-util.js'); var writeFile = util.writeFile; var traceur = require('./traceur.js');

var Compiler = traceur.Compiler;

function NodeCompiler(options, sourceRoot) {

sourceRoot = sourceRoot || process.cwd();
Compiler.call(this, options, sourceRoot);

}

NodeCompiler.prototype = {

__proto__: Compiler.prototype,

writeTreeToFile: function(tree, filename) {
  filename = this.normalize(filename);
  var compiledCode = this.write(tree, filename);
  if (this.options_.sourceMaps === 'file') {
    var sourcemap = this.getSourceMap();
    if (sourcemap) {
      writeFile(this.sourceMappingURL(filename), sourcemap);
    }
  }

  writeFile(filename, compiledCode);
},

compileSingleFile: function(inputFilePath, outputFilePath, errback) {
  inputFilePath = this.normalize(inputFilePath);
  outputFilePath = this.normalize(outputFilePath);
  fs.readFile(inputFilePath, function(err, contents) {
    if (err) {
      errback(err);
      return;
    }

    this.writeTreeToFile(this.transform(
        this.parse(contents.toString(), inputFilePath)), outputFilePath);
  }.bind(this));
},

sourceMappingURL: function(filename) {
  if (this.options_.sourceMaps === 'inline') {
    var base64sm = new Buffer(this.getSourceMap()).toString('base64');
    return 'data:application/json;base64,' + base64sm;
  }
  return Compiler.prototype.sourceMappingURL.call(this, filename);
}

};

module.exports = {

NodeCompiler: NodeCompiler

};