forked from webpack-contrib/style-loader
-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
64 lines (54 loc) · 2.32 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
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;
var hmrCode = [
"// Hot Module Replacement",
"if(module.hot) {",
" // When the styles change, update the <style> tags",
" if(!content.locals) {",
" module.hot.accept(" + loaderUtils.stringifyRequest(this, "!!" + request) + ", function() {",
" var newContent = require(" + loaderUtils.stringifyRequest(this, "!!" + request) + ");",
" if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];",
" update(newContent);",
" });",
" }",
" // When the module is disposed, remove the <style> tags",
" module.hot.dispose(function() { update(); });",
"}"
].join("\n");
var insertInto = "void 0";
if (typeof options.insertInto === "function") {
insertInto = options.insertInto.toString();
}
if (typeof options.insertInto === "string") {
insertInto = '"' + options.insertInto + '"';
}
return [
"// style-loader: Adds some css to the DOM by adding a <style> tag",
"",
"// load the styles",
"var content = require(" + loaderUtils.stringifyRequest(this, "!!" + request) + ");",
"if(typeof content === 'string') content = [[module.id, content, '']];",
"// Prepare cssTransformation",
"var transform;",
options.transform ? "transform = require(" + loaderUtils.stringifyRequest(this, "!" + path.resolve(options.transform)) + ");" : "",
"var insertInto = " + insertInto + ";" ,
"var options = " + JSON.stringify(options),
"options.transform = transform",
"options.insertInto = insertInto;",
"// add the 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 ? hmrCode : ""
].join("\n");
};