react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / handlebars / dist / amd / precompiler.js
80698 viewsdefine(1[],2function() {3"use strict";45var fs = require('fs'),6Handlebars = require('./index'),7basename = require('path').basename,8SourceMap = require('source-map'),9SourceMapConsumer = SourceMap.SourceMapConsumer,10SourceNode = SourceMap.SourceNode,11uglify = require('uglify-js');1213module.exports.cli = function(opts) {14if (opts.version) {15console.log(Handlebars.VERSION);16return;17}1819if (!opts.templates.length) {20throw new Handlebars.Exception('Must define at least one template or directory.');21}2223opts.templates.forEach(function(template) {24try {25fs.statSync(template);26} catch (err) {27throw new Handlebars.Exception('Unable to open template file "' + template + '"');28}29});3031if (opts.simple && opts.min) {32throw new Handlebars.Exception('Unable to minimize simple output');33}34if (opts.simple && (opts.templates.length !== 1 || fs.statSync(opts.templates[0]).isDirectory())) {35throw new Handlebars.Exception('Unable to output multiple templates in simple mode');36}3738// Convert the known list into a hash39var known = {};40if (opts.known && !Array.isArray(opts.known)) {41opts.known = [opts.known];42}43if (opts.known) {44for (var i = 0, len = opts.known.length; i < len; i++) {45known[opts.known[i]] = true;46}47}4849// Build file extension pattern50var extension = opts.extension.replace(/[\\^$*+?.():=!|{}\-\[\]]/g, function(arg) { return '\\' + arg; });51extension = new RegExp('\\.' + extension + '$');5253var output = new SourceNode();54if (!opts.simple) {55if (opts.amd) {56output.add('define([\'' + opts.handlebarPath + 'handlebars.runtime\'], function(Handlebars) {\n Handlebars = Handlebars["default"];');57} else if (opts.commonjs) {58output.add('var Handlebars = require("' + opts.commonjs + '");');59} else {60output.add('(function() {\n');61}62output.add(' var template = Handlebars.template, templates = ');63if (opts.namespace) {64output.add(opts.namespace);65output.add(' = ');66output.add(opts.namespace);67output.add(' || ');68}69output.add('{};\n');70}71function processTemplate(template, root) {72var path = template,73stat = fs.statSync(path);74if (stat.isDirectory()) {75fs.readdirSync(template).map(function(file) {76var path = template + '/' + file;7778if (extension.test(path) || fs.statSync(path).isDirectory()) {79processTemplate(path, root || template);80}81});82} else {83var data = fs.readFileSync(path, 'utf8');8485if (opts.bom && data.indexOf('\uFEFF') === 0) {86data = data.substring(1);87}8889var options = {90knownHelpers: known,91knownHelpersOnly: opts.o92};9394if (opts.map) {95options.srcName = path;96}97if (opts.data) {98options.data = true;99}100101// Clean the template name102if (!root) {103template = basename(template);104} else if (template.indexOf(root) === 0) {105template = template.substring(root.length+1);106}107template = template.replace(extension, '');108109var precompiled = Handlebars.precompile(data, options);110111// If we are generating a source map, we have to reconstruct the SourceNode object112if (opts.map) {113var consumer = new SourceMapConsumer(precompiled.map);114precompiled = SourceNode.fromStringWithSourceMap(precompiled.code, consumer);115}116117if (opts.simple) {118output.add([precompiled, '\n']);119} else if (opts.partial) {120if(opts.amd && (opts.templates.length == 1 && !fs.statSync(opts.templates[0]).isDirectory())) {121output.add('return ');122}123output.add(['Handlebars.partials[\'', template, '\'] = template(', precompiled, ');\n']);124} else {125if(opts.amd && (opts.templates.length == 1 && !fs.statSync(opts.templates[0]).isDirectory())) {126output.add('return ');127}128output.add(['templates[\'', template, '\'] = template(', precompiled, ');\n']);129}130}131}132133opts.templates.forEach(function(template) {134processTemplate(template, opts.root);135});136137// Output the content138if (!opts.simple) {139if (opts.amd) {140if(opts.templates.length > 1 || (opts.templates.length == 1 && fs.statSync(opts.templates[0]).isDirectory())) {141if(opts.partial){142output.add('return Handlebars.partials;\n');143} else {144output.add('return templates;\n');145}146}147output.add('});');148} else if (!opts.commonjs) {149output.add('})();');150}151}152153154if (opts.map) {155output.add('\n//# sourceMappingURL=' + opts.map + '\n');156}157158output = output.toStringWithSourceMap();159output.map = output.map + '';160161if (opts.min) {162output = uglify.minify(output.code, {163fromString: true,164165outSourceMap: opts.map,166inSourceMap: JSON.parse(output.map)167});168if (opts.map) {169output.code += '\n//# sourceMappingURL=' + opts.map + '\n';170}171}172173if (opts.map) {174fs.writeFileSync(opts.map, output.map, 'utf8');175}176output = output.code;177178if (opts.output) {179fs.writeFileSync(opts.output, output, 'utf8');180} else {181console.log(output);182}183};184});185186