index.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _path = _interopRequireDefault(require("path"));
  7. var _loaderUtils = _interopRequireDefault(require("loader-utils"));
  8. var _schemaUtils = _interopRequireDefault(require("schema-utils"));
  9. var _options = _interopRequireDefault(require("./options.json"));
  10. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  11. const loaderApi = () => {};
  12. loaderApi.pitch = function loader(request) {
  13. const options = _loaderUtils.default.getOptions(this) || {};
  14. (0, _schemaUtils.default)(_options.default, options, {
  15. name: 'Style Loader',
  16. baseDataPath: 'options'
  17. });
  18. const insert = typeof options.insert === 'undefined' ? '"head"' : typeof options.insert === 'string' ? JSON.stringify(options.insert) : options.insert.toString();
  19. const injectType = options.injectType || 'styleTag';
  20. const esModule = typeof options.esModule !== 'undefined' ? options.esModule : false;
  21. delete options.esModule;
  22. switch (injectType) {
  23. case 'linkTag':
  24. {
  25. const hmrCode = this.hot ? `
  26. if (module.hot) {
  27. module.hot.accept(
  28. ${_loaderUtils.default.stringifyRequest(this, `!!${request}`)},
  29. function() {
  30. ${esModule ? `update(content);` : `var newContent = require(${_loaderUtils.default.stringifyRequest(this, `!!${request}`)});
  31. newContent = newContent.__esModule ? newContent.default : newContent;
  32. update(newContent);`}
  33. }
  34. );
  35. module.hot.dispose(function() {
  36. update();
  37. });
  38. }` : '';
  39. return `${esModule ? `import api from ${_loaderUtils.default.stringifyRequest(this, `!${_path.default.join(__dirname, 'runtime/injectStylesIntoLinkTag.js')}`)};
  40. import content from ${_loaderUtils.default.stringifyRequest(this, `!!${request}`)};` : `var api = require(${_loaderUtils.default.stringifyRequest(this, `!${_path.default.join(__dirname, 'runtime/injectStylesIntoLinkTag.js')}`)});
  41. var content = require(${_loaderUtils.default.stringifyRequest(this, `!!${request}`)});
  42. content = content.__esModule ? content.default : content;`}
  43. var options = ${JSON.stringify(options)};
  44. options.insert = ${insert};
  45. var update = api(content, options);
  46. ${hmrCode}
  47. ${esModule ? `export default {}` : ''}`;
  48. }
  49. case 'lazyStyleTag':
  50. case 'lazySingletonStyleTag':
  51. {
  52. const isSingleton = injectType === 'lazySingletonStyleTag';
  53. const hmrCode = this.hot ? `
  54. if (module.hot) {
  55. var lastRefs = module.hot.data && module.hot.data.refs || 0;
  56. if (lastRefs) {
  57. exported.use();
  58. if (!content.locals) {
  59. refs = lastRefs;
  60. }
  61. }
  62. if (!content.locals) {
  63. module.hot.accept();
  64. }
  65. module.hot.dispose(function(data) {
  66. data.refs = content.locals ? 0 : refs;
  67. if (dispose) {
  68. dispose();
  69. }
  70. });
  71. }` : '';
  72. return `${esModule ? `import api from ${_loaderUtils.default.stringifyRequest(this, `!${_path.default.join(__dirname, 'runtime/injectStylesIntoStyleTag.js')}`)};
  73. import content from ${_loaderUtils.default.stringifyRequest(this, `!!${request}`)};` : `var api = require(${_loaderUtils.default.stringifyRequest(this, `!${_path.default.join(__dirname, 'runtime/injectStylesIntoStyleTag.js')}`)});
  74. var content = require(${_loaderUtils.default.stringifyRequest(this, `!!${request}`)});
  75. content = content.__esModule ? content.default : content;
  76. if (typeof content === 'string') {
  77. content = [[module.id, content, '']];
  78. }`}
  79. var refs = 0;
  80. var dispose;
  81. var options = ${JSON.stringify(options)};
  82. options.insert = ${insert};
  83. options.singleton = ${isSingleton};
  84. var exported = {};
  85. if (content.locals) {
  86. exported.locals = content.locals;
  87. }
  88. exported.use = function() {
  89. if (!(refs++)) {
  90. dispose = api(content, options);
  91. }
  92. return exported;
  93. };
  94. exported.unuse = function() {
  95. if (refs > 0 && !--refs) {
  96. dispose();
  97. dispose = null;
  98. }
  99. };
  100. ${hmrCode}
  101. ${esModule ? 'export default' : 'module.exports ='} exported;`;
  102. }
  103. case 'styleTag':
  104. case 'singletonStyleTag':
  105. default:
  106. {
  107. const isSingleton = injectType === 'singletonStyleTag';
  108. const hmrCode = this.hot ? `
  109. if (module.hot) {
  110. if (!content.locals) {
  111. module.hot.accept(
  112. ${_loaderUtils.default.stringifyRequest(this, `!!${request}`)},
  113. function () {
  114. ${esModule ? `update(content);` : `var newContent = require(${_loaderUtils.default.stringifyRequest(this, `!!${request}`)});
  115. newContent = newContent.__esModule ? newContent.default : newContent;
  116. if (typeof newContent === 'string') {
  117. newContent = [[module.id, newContent, '']];
  118. }
  119. update(newContent);`}
  120. }
  121. )
  122. }
  123. module.hot.dispose(function() {
  124. update();
  125. });
  126. }` : '';
  127. return `${esModule ? `import api from ${_loaderUtils.default.stringifyRequest(this, `!${_path.default.join(__dirname, 'runtime/injectStylesIntoStyleTag.js')}`)};
  128. import content from ${_loaderUtils.default.stringifyRequest(this, `!!${request}`)};
  129. var clonedContent = content;` : `var api = require(${_loaderUtils.default.stringifyRequest(this, `!${_path.default.join(__dirname, 'runtime/injectStylesIntoStyleTag.js')}`)});
  130. var content = require(${_loaderUtils.default.stringifyRequest(this, `!!${request}`)});
  131. content = content.__esModule ? content.default : content;
  132. if (typeof content === 'string') {
  133. content = [[module.id, content, '']];
  134. }`}
  135. var options = ${JSON.stringify(options)};
  136. options.insert = ${insert};
  137. options.singleton = ${isSingleton};
  138. var update = api(content, options);
  139. var exported = content.locals ? content.locals : {};
  140. ${hmrCode}
  141. ${esModule ? 'export default' : 'module.exports ='} exported;`;
  142. }
  143. }
  144. };
  145. var _default = loaderApi;
  146. exports.default = _default;