react / react-0.13.3 / examples / basic-commonjs / node_modules / browserify / node_modules / umd / index.js
80709 views'use strict';12var through = require('through');3var rfile = require('rfile');4var uglify = require('uglify-js');5var templateSTR = rfile('./template.js');67function template(moduleName, cjs) {8var str = uglify.minify(9templateSTR.replace(/\{\{defineNamespace\}\}/g, compileNamespace(moduleName)),10{fromString: true}).code11.split('source()')12str[0] = str[0].trim();13//make sure these are undefined so as to not get confused if modules have inner UMD systems14str[0] += 'var define,module,exports;';15if (cjs) str[0] += 'module={exports:(exports={})};';16str[0] += '\n';17if (cjs) str[1] = 'return module.exports;' + str[1];18str[1] = '\n' + str[1];19return str;20}2122exports = module.exports = function (name, cjs, src) {23if (typeof cjs === 'string') {24var tmp = cjs;25cjs = src;26src = tmp;27}28if (src) {29return exports.prelude(name, cjs) + src + exports.postlude(name, cjs);30}31var strm = through(write, end);32var first = true;33function write(chunk) {34if (first) strm.queue(exports.prelude(name, cjs));35first = false;36strm.queue(chunk);37}38function end() {39if (first) strm.queue(exports.prelude(name, cjs));40strm.queue(exports.postlude(name, cjs));41strm.queue(null);42}43return strm;44};4546exports.prelude = function (moduleName, cjs) {47return template(moduleName, cjs)[0];48};49exports.postlude = function (moduleName, cjs) {50return template(moduleName, cjs)[1];51};525354function camelCase(name) {55name = name.replace(/\-([a-z])/g, function (_, char) { return char.toUpperCase(); });56return name.replace(/[^a-zA-Z0-9]+/g, '')57}585960function compileNamespace(name) {61var names = name.split('.')6263// No namespaces, yield the best case 'global.NAME = VALUE'64if (names.length === 1) {65return 'g.' + camelCase(name) + ' = f()';6667// Acceptable case, with reasonable compilation68} else if (names.length === 2) {69names = names.map(camelCase);70return '(g.' + names[0] + ' || (g.' + names[0] + ' = {})).' + names[1] + ' = f()';7172// Worst case, too many namespaces to care about73} else {74var valueContainer = names.pop()75return names.reduce(compileNamespaceStep, ['var ref$ = g'])76.concat(['ref$.' + camelCase(valueContainer) + ' = f()'])77.join(';\n ');78}79}8081function compileNamespaceStep(code, name, i, names) {82name = camelCase(name);83code.push('ref$ = (ref$.' + name + ' || (ref$.' + name + ' = {}))')84return code85}868788