'use strict'; var templateSTR = "(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}defineNamespace()}})(function(){source()});\n"; function template(moduleName, options) { if (typeof options === 'boolean') { options = {commonJS: options}; } else if (!options) { options = {}; } var str = templateSTR.replace(/defineNamespace\(\)/g, compileNamespace(moduleName)) .split('source()') str[0] = str[0].trim(); //make sure these are undefined so as to not get confused if modules have inner UMD systems str[0] += 'var define,module,exports;'; if (options.commonJS) str[0] += 'module={exports:(exports={})};'; str[0] += '\n'; if (options.commonJS) str[1] = 'return module.exports;' + str[1]; str[1] = '\n' + str[1]; return str; } exports = module.exports = function (name, src, options) { if (typeof options === 'string' && typeof src === 'object') { var tmp = options; options = src; src = tmp; } return exports.prelude(name, options) + src + exports.postlude(name, options); }; exports.prelude = function (moduleName, options) { return template(moduleName, options)[0]; }; exports.postlude = function (moduleName, options) { return template(moduleName, options)[1]; }; function camelCase(name) { name = name.replace(/\-([a-z])/g, function (_, char) { return char.toUpperCase(); }); if (!/^[a-zA-Z_$]$/.test(name[0])) { name = name.substr(1); } var result = name.replace(/[^\w$]+/g, '') if (!result) { throw new Error('Invalid JavaScript identifier resulted from camel-casing'); } return result } function compileNamespace(name) { var names = name.split('.') // No namespaces, yield the best case 'global.NAME = VALUE' if (names.length === 1) { return 'g.' + camelCase(name) + ' = f()'; // Acceptable case, with reasonable compilation } else if (names.length === 2) { names = names.map(camelCase); return '(g.' + names[0] + ' || (g.' + names[0] + ' = {})).' + names[1] + ' = f()'; // Worst case, too many namespaces to care about } else { var valueContainer = names.pop() return names.map(compileNamespaceStep) .concat(['g.' + camelCase(valueContainer) + ' = f()']) .join(';'); } } function compileNamespaceStep(name) { name = camelCase(name); return 'g=(g.' + name + '||(g.' + name + ' = {}))'; }