diff options
Diffstat (limited to 'node_modules/style-loader/index.js')
-rw-r--r-- | node_modules/style-loader/index.js | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/node_modules/style-loader/index.js b/node_modules/style-loader/index.js new file mode 100644 index 0000000..7474e59 --- /dev/null +++ b/node_modules/style-loader/index.js @@ -0,0 +1,96 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +var path = require("path"); + +var loaderUtils = require("loader-utils"); +var validateOptions = require('schema-utils'); + +module.exports = function () {}; + +module.exports.pitch = function (request) { + if (this.cacheable) this.cacheable(); + + var options = loaderUtils.getOptions(this) || {}; + + validateOptions(require('./options.json'), options, 'Style Loader') + + options.hmr = typeof options.hmr === 'undefined' ? true : options.hmr; + + // The variable is needed, because the function should be inlined. + // If is just stored it in options, JSON.stringify will quote + // the function and it would be just a string at runtime + var insertInto; + + if (typeof options.insertInto === "function") { + insertInto = options.insertInto.toString(); + } + + // We need to check if it a string, or variable will be "undefined" + // and the loader crashes + if (typeof options.insertInto === "string") { + insertInto = '"' + options.insertInto + '"'; + } + + var hmr = [ + // Hot Module Replacement, + "if(module.hot) {", + // When the styles change, update the <style> tags + " module.hot.accept(" + loaderUtils.stringifyRequest(this, "!!" + request) + ", function() {", + " var newContent = require(" + loaderUtils.stringifyRequest(this, "!!" + request) + ");", + "", + " if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];", + "", + " var locals = (function(a, b) {", + " var key, idx = 0;", + "", + " for(key in a) {", + " if(!b || a[key] !== b[key]) return false;", + " idx++;", + " }", + "", + " for(key in b) idx--;", + "", + " return idx === 0;", + " }(content.locals, newContent.locals));", + "", + // This error is caught and not shown and causes a full reload + " if(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');", + "", + " update(newContent);", + " });", + "", + // When the module is disposed, remove the <style> tags + " module.hot.dispose(function() { update(); });", + "}" + ].join("\n"); + + return [ + // Style Loader + // Adds CSS to the DOM by adding a <style> tag + "", + // Load styles + "var content = require(" + loaderUtils.stringifyRequest(this, "!!" + request) + ");", + "", + "if(typeof content === 'string') content = [[module.id, content, '']];", + "", + // Transform styles", + "var transform;", + "var insertInto;", + "", + options.transform ? "transform = require(" + loaderUtils.stringifyRequest(this, "!" + path.resolve(options.transform)) + ");" : "", + "", + "var options = " + JSON.stringify(options), + "", + "options.transform = transform", + "options.insertInto = " + insertInto + ";", + "", + // Add styles to the DOM + "var update = require(" + loaderUtils.stringifyRequest(this, "!" + path.join(__dirname, "lib", "addStyles.js")) + ")(content, options);", + "", + "if(content.locals) module.exports = content.locals;", + "", + options.hmr ? hmr : "" + ].join("\n"); +}; |