Plato on Github
Report Home
lib/packer.js
Maintainability
67.69
Lines of code
196
Difficulty
43.64
Estimated Errors
1.59
Function weight
By Complexity
By SLOC
// Generated by CoffeeScript 1.6.2 /* This class pack all together with layout Тут у нас и происходит встройка данных с путями и кодом файлов в шаблон, эмулирующий require и export */ (function() { var Packer, async, clinch_package, _, __hasProp = {}.hasOwnProperty; _ = require('lodash'); async = require('async'); clinch_package = require('../package.json'); Packer = (function() { function Packer(_bundle_processor_, _options_) { var _ref, _ref1; this._bundle_processor_ = _bundle_processor_; this._options_ = _options_ != null ? _options_ : {}; this._do_logging_ = (this._options_.log != null) && this._options_.log === true && ((typeof console !== "undefined" && console !== null ? console.log : void 0) != null) ? true : false; this._settings_ = { strict: (_ref = this._options_.strict) != null ? _ref : true, inject: (_ref1 = this._options_.inject) != null ? _ref1 : true }; this._clinch_verison_ = clinch_package.version; } /* This method create browser package with given configuration */ Packer.prototype.buldPackage = function(package_config, main_cb) { var _this = this; return this._bundle_processor_.buildAll(package_config, function(err, package_code) { if (err) { return main_cb(err); } return main_cb(null, _this._assemblePackage(package_code, package_config)); }); }; /* This method assemble result .js file from bundleset */ Packer.prototype._assemblePackage = function(package_code, package_config) { var env_body, env_header, result, _ref; _ref = this._buildEnvironment(package_code.environment_list, package_code.members), env_header = _ref[0], env_body = _ref[1]; result = this._getHeader(env_header, package_config.strict, package_code.dependencies_tree); result += this._getSource(package_code.source_code); result += env_body; result += this._getExportDef(package_config, package_code); return result + "\n" + this._getFooter(); }; /* This method build "environment" - local for package variables They immitate node.js internal gobal things (like process.nextTick, f.e.) */ Packer.prototype._buildEnvironment = function(names, paths) { var body, header; if (!names.length) { return ['', '']; } header = "/* this is environment vars */\nvar " + names.join(', ') + ';'; body = _.reduce(names, function(memo, val) { return memo += "" + val + " = require(" + paths[val] + ");\n"; }, ''); return [header, body]; }; /* This method create full clinch header */ Packer.prototype._getHeader = function(env_header, strict_settings, dependencies_tree) { return "// Generated by clinch " + this._clinch_verison_ + "\n(function() {\n " + (this._getStrictLine(strict_settings)) + "\n " + env_header + "\n " + (this._getBoilerplateJS()) + "\n dependencies = " + (JSON.stringify(dependencies_tree)) + ";"; }; /* This method gather all sources */ Packer.prototype._getSource = function(source_obj) { var code, name, result, source_index; result = " sources = {\n"; source_index = 0; for (name in source_obj) { if (!__hasProp.call(source_obj, name)) continue; code = source_obj[name]; result += source_index++ === 0 ? "" : ",\n"; result += JSON.stringify(name); result += ": function(exports, module, require) {" + code + "}"; } return result += "};\n"; }; /* This method create export definition part */ Packer.prototype._getExportDef = function(_arg, package_code) { var inject, package_name, prefix; package_name = _arg.package_name, inject = _arg.inject; if (inject == null) { inject = this._settings_.inject; } prefix = this._getMemberPrefix(inject); return "/* bundle export */\n" + (package_name != null ? "" + prefix + package_name + " = {\n " + (this._showBundleMembers(package_code, '', ':')) + "\n};" : this._showBundleMembers(package_code, prefix, '=')); }; /* This method will show all bundle members for exports part */ Packer.prototype._showBundleMembers = function(_arg, member_prefix, delimiter) { var bundle_list, bundle_name, members; bundle_list = _arg.bundle_list, members = _arg.members; members = (function() { var _i, _len, _results; _results = []; for (_i = 0, _len = bundle_list.length; _i < _len; _i++) { bundle_name = bundle_list[_i]; _results.push("" + member_prefix + bundle_name + " " + delimiter + " require(" + members[bundle_name] + ")"); } return _results; })(); return members.join(",\n"); }; /* This method return `use 'strict';` line or empty is strict mode supressed */ Packer.prototype._getStrictLine = function(isStrict) { if (isStrict == null) { isStrict = this._settings_.strict; } if (isStrict) { return "'use strict';"; } else { return ''; } }; /* This method return bundle prefix, will used to supress bundle injection */ Packer.prototype._getMemberPrefix = function(isInject) { if (isInject) { return 'this.'; } else { return 'var '; } }; /* This is header for our browser package */ Packer.prototype._getBoilerplateJS = function() { return " \nvar dependencies, name_resolver, require, sources, _this = this;\n\nname_resolver = function(parent, name) {\n if (dependencies[parent] == null) {\n throw Error(\"no dependencies list for parent |\" + parent + \"|\");\n }\n if (dependencies[parent][name] == null) {\n throw Error(\"no one module resolved, name - |\" + name + \"|, parent - |\" + parent + \"|\");\n }\n return dependencies[parent][name];\n};\nrequire = function(name, parent) {\n var exports, module, module_source, resolved_name, _ref;\n if (!(module_source = sources[name])) {\n resolved_name = name_resolver(parent, name);\n if (!(module_source = sources[resolved_name])) {\n throw Error(\"can`t find module source code: original_name - |\" + name + \"|, resolved_name - |\" + resolved_name + \"|\");\n }\n }\n module_source.call(_this,exports = {}, module = {}, function(mod_name) {\n return require(mod_name, resolved_name != null ? resolved_name : name);\n });\n return (_ref = module.exports) != null ? _ref : exports;\n};"; }; /* This is footer of code wrapper */ Packer.prototype._getFooter = function() { return "}).call(this);"; }; return Packer; })(); module.exports = Packer; }).call(this);