#!/usr/bin/env node "use strict"; var visitors = require('../vendor/fbtransform/visitors').transformVisitors; var transform = require('../vendor/fbtransform/lib/transform').transform; var debranch = require("../vendor/woodchipper").debranch; require("commoner").resolve(function(id) { var context = this; // Note that the result of context.getProvidedP() is cached for the // duration of the build, so it is both consistent and cheap to // evaluate multiple times. return context.getProvidedP().then(function(idToPath) { // If a module declares its own identifier using @providesModule // then that identifier will be a key in the idToPath object. if (idToPath.hasOwnProperty(id)) { return context.readFileP(idToPath[id]); } // Otherwise assume the identifier maps directly to a path in the // filesystem. return context.readModuleP(id); }); }).process(function(id, source) { var context = this; // This is where JSX, ES6, etc. desugaring happens. source = transform(visitors.react, source).code; return context.makePromise(function(callback) { var constants = context.config.constants || {}; // Debranching means removing any obviously dead code after // replacing constant conditional expressions with literal // (boolean) values. debranch(constants, source, function(source) { callback(null, source); }); }); });