|
|
- /*
- 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 (Useable)');
-
- 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) {",
- " var lastRefs = module.hot.data && module.hot.data.refs || 0;",
- "",
- " if(lastRefs) {",
- " exports.ref();",
- " if(!content.locals) {",
- " refs = lastRefs;",
- " }",
- " }",
- "",
- " if(!content.locals) {",
- " module.hot.accept();",
- " }",
- "",
- " module.hot.dispose(function(data) {",
- " data.refs = content.locals ? 0 : refs;",
- "",
- " if(dispose) {",
- " dispose();",
- " }",
- " });",
- "}"
- ].join("\n");
-
- return [
- "var refs = 0;",
- "var dispose;",
- "var content = require(" + loaderUtils.stringifyRequest(this, "!!" + request) + ");",
- "var options = " + JSON.stringify(options) + ";",
- "options.insertInto = " + insertInto + ";",
- "",
- "if(typeof content === 'string') content = [[module.id, content, '']];",
- // Export CSS Modules
- "if(content.locals) exports.locals = content.locals;",
- "",
- "exports.use = exports.ref = function() {",
- " if(!(refs++)) {",
- " dispose = require(" + loaderUtils.stringifyRequest(this, "!" + path.join(__dirname, "lib", "addStyles.js")) + ")(content, options);",
- " }",
- "",
- " return exports;",
- "};",
- "",
- "exports.unuse = exports.unref = function() {",
- " if(refs > 0 && !(--refs)) {",
- " dispose();",
- " dispose = null;",
- " }",
- "};",
- options.hmr ? hmr : ""
- ].join("\n");
- };
|