summaryrefslogtreecommitdiffstats
path: root/node_modules/style-loader/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/style-loader/index.js')
-rw-r--r--node_modules/style-loader/index.js96
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");
+};