165 lines
4.3 KiB
JavaScript
165 lines
4.3 KiB
JavaScript
"use strict";
|
|
|
|
var _path = _interopRequireDefault(require("path"));
|
|
|
|
var _loaderUtils = _interopRequireDefault(require("loader-utils"));
|
|
|
|
var _schemaUtils = _interopRequireDefault(require("schema-utils"));
|
|
|
|
var _options = _interopRequireDefault(require("./options.json"));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
module.exports = () => {};
|
|
|
|
module.exports.pitch = function loader(request) {
|
|
const options = _loaderUtils.default.getOptions(this) || {};
|
|
(0, _schemaUtils.default)(_options.default, options, {
|
|
name: 'Style Loader',
|
|
baseDataPath: 'options'
|
|
});
|
|
const insert = typeof options.insert === 'undefined' ? '"head"' : typeof options.insert === 'string' ? JSON.stringify(options.insert) : options.insert.toString();
|
|
const injectType = options.injectType || 'styleTag';
|
|
|
|
switch (injectType) {
|
|
case 'linkTag':
|
|
{
|
|
const hmrCode = this.hot ? `
|
|
if (module.hot) {
|
|
module.hot.accept(
|
|
${_loaderUtils.default.stringifyRequest(this, `!!${request}`)},
|
|
function() {
|
|
var newContent = require(${_loaderUtils.default.stringifyRequest(this, `!!${request}`)});
|
|
newContent = newContent.__esModule ? newContent.default : newContent;
|
|
|
|
update(newContent);
|
|
}
|
|
);
|
|
|
|
module.hot.dispose(function() {
|
|
update();
|
|
});
|
|
}` : '';
|
|
return `var options = ${JSON.stringify(options)};
|
|
|
|
options.insert = ${insert};
|
|
|
|
var content = require(${_loaderUtils.default.stringifyRequest(this, `!!${request}`)});
|
|
content = content.__esModule ? content.default : content;
|
|
|
|
var update = require(${_loaderUtils.default.stringifyRequest(this, `!${_path.default.join(__dirname, 'runtime/injectStylesIntoLinkTag.js')}`)})(content, options);
|
|
${hmrCode}`;
|
|
}
|
|
|
|
case 'lazyStyleTag':
|
|
case 'lazySingletonStyleTag':
|
|
{
|
|
const isSingleton = injectType === 'lazySingletonStyleTag';
|
|
const hmrCode = this.hot ? `
|
|
if (module.hot) {
|
|
var lastRefs = module.hot.data && module.hot.data.refs || 0;
|
|
|
|
if (lastRefs) {
|
|
exports.use();
|
|
|
|
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();
|
|
}
|
|
});
|
|
}` : '';
|
|
return `var refs = 0;
|
|
var dispose;
|
|
var content = require(${_loaderUtils.default.stringifyRequest(this, `!!${request}`)});
|
|
content = content.__esModule ? content.default : content;
|
|
|
|
var options = ${JSON.stringify(options)};
|
|
|
|
options.insert = ${insert};
|
|
options.singleton = ${isSingleton};
|
|
|
|
if (typeof content === 'string') {
|
|
content = [[module.id, content, '']];
|
|
}
|
|
|
|
if (content.locals) {
|
|
exports.locals = content.locals;
|
|
}
|
|
|
|
exports.use = function() {
|
|
if (!(refs++)) {
|
|
dispose = require(${_loaderUtils.default.stringifyRequest(this, `!${_path.default.join(__dirname, 'runtime/injectStylesIntoStyleTag.js')}`)})(content, options);
|
|
}
|
|
|
|
return exports;
|
|
};
|
|
|
|
exports.unuse = function() {
|
|
if (refs > 0 && !--refs) {
|
|
dispose();
|
|
dispose = null;
|
|
}
|
|
};
|
|
${hmrCode}
|
|
`;
|
|
}
|
|
|
|
case 'styleTag':
|
|
case 'singletonStyleTag':
|
|
default:
|
|
{
|
|
const isSingleton = injectType === 'singletonStyleTag';
|
|
const hmrCode = this.hot ? `
|
|
if (module.hot) {
|
|
if (!content.locals) {
|
|
module.hot.accept(
|
|
${_loaderUtils.default.stringifyRequest(this, `!!${request}`)},
|
|
function () {
|
|
var newContent = require(${_loaderUtils.default.stringifyRequest(this, `!!${request}`)});
|
|
newContent = newContent.__esModule ? newContent.default : newContent;
|
|
|
|
if (typeof newContent === 'string') {
|
|
newContent = [[module.id, newContent, '']];
|
|
}
|
|
|
|
update(newContent);
|
|
}
|
|
)
|
|
}
|
|
|
|
module.hot.dispose(function() {
|
|
update();
|
|
});
|
|
}` : '';
|
|
return `var content = require(${_loaderUtils.default.stringifyRequest(this, `!!${request}`)});
|
|
content = content.__esModule ? content.default : content;
|
|
|
|
if (typeof content === 'string') {
|
|
content = [[module.id, content, '']];
|
|
}
|
|
|
|
var options = ${JSON.stringify(options)}
|
|
|
|
options.insert = ${insert};
|
|
options.singleton = ${isSingleton};
|
|
|
|
var update = require(${_loaderUtils.default.stringifyRequest(this, `!${_path.default.join(__dirname, 'runtime/injectStylesIntoStyleTag.js')}`)})(content, options);
|
|
|
|
if (content.locals) {
|
|
module.exports = content.locals;
|
|
}
|
|
${hmrCode}`;
|
|
}
|
|
}
|
|
}; |