utils.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.getExportLazyStyleCode = getExportLazyStyleCode;
  6. exports.getExportStyleCode = getExportStyleCode;
  7. exports.getImportInsertBySelectorCode = getImportInsertBySelectorCode;
  8. exports.getImportInsertStyleElementCode = getImportInsertStyleElementCode;
  9. exports.getImportIsOldIECode = getImportIsOldIECode;
  10. exports.getImportLinkAPICode = getImportLinkAPICode;
  11. exports.getImportLinkContentCode = getImportLinkContentCode;
  12. exports.getImportStyleAPICode = getImportStyleAPICode;
  13. exports.getImportStyleContentCode = getImportStyleContentCode;
  14. exports.getImportStyleDomAPICode = getImportStyleDomAPICode;
  15. exports.getInsertOptionCode = getInsertOptionCode;
  16. exports.getLinkHmrCode = getLinkHmrCode;
  17. exports.getSetAttributesCode = getSetAttributesCode;
  18. exports.getStyleHmrCode = getStyleHmrCode;
  19. exports.getStyleTagTransformFn = getStyleTagTransformFn;
  20. exports.getStyleTagTransformFnCode = getStyleTagTransformFnCode;
  21. exports.getdomAPI = getdomAPI;
  22. exports.stringifyRequest = stringifyRequest;
  23. var _path = _interopRequireDefault(require("path"));
  24. var _isEqualLocals = _interopRequireDefault(require("./runtime/isEqualLocals"));
  25. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  26. function stringifyRequest(loaderContext, request) {
  27. return JSON.stringify(loaderContext.utils.contextify(loaderContext.context, request));
  28. }
  29. function getImportLinkAPICode(esModule, loaderContext) {
  30. const modulePath = stringifyRequest(loaderContext, `!${_path.default.join(__dirname, "runtime/injectStylesIntoLinkTag.js")}`);
  31. return esModule ? `import API from ${modulePath};` : `var API = require(${modulePath});`;
  32. }
  33. function getImportLinkContentCode(esModule, loaderContext, request) {
  34. const modulePath = stringifyRequest(loaderContext, `!!${request}`);
  35. return esModule ? `import content from ${modulePath};` : `var content = require(${modulePath});`;
  36. }
  37. function getImportStyleAPICode(esModule, loaderContext) {
  38. const modulePath = stringifyRequest(loaderContext, `!${_path.default.join(__dirname, "runtime/injectStylesIntoStyleTag.js")}`);
  39. return esModule ? `import API from ${modulePath};` : `var API = require(${modulePath});`;
  40. }
  41. function getImportStyleDomAPICode(esModule, loaderContext, isSingleton, isAuto) {
  42. const styleAPI = stringifyRequest(loaderContext, `!${_path.default.join(__dirname, "runtime/styleDomAPI.js")}`);
  43. const singletonAPI = stringifyRequest(loaderContext, `!${_path.default.join(__dirname, "runtime/singletonStyleDomAPI.js")}`);
  44. if (isAuto) {
  45. return esModule ? `import domAPI from ${styleAPI};
  46. import domAPISingleton from ${singletonAPI};` : `var domAPI = require(${styleAPI});
  47. var domAPISingleton = require(${singletonAPI});`;
  48. }
  49. return esModule ? `import domAPI from ${isSingleton ? singletonAPI : styleAPI};` : `var domAPI = require(${isSingleton ? singletonAPI : styleAPI});`;
  50. }
  51. function getImportStyleContentCode(esModule, loaderContext, request) {
  52. const modulePath = stringifyRequest(loaderContext, `!!${request}`);
  53. return esModule ? `import content, * as namedExport from ${modulePath};` : `var content = require(${modulePath});`;
  54. }
  55. function getImportInsertBySelectorCode(esModule, loaderContext, insertType, options) {
  56. if (insertType === "module-path") {
  57. const modulePath = stringifyRequest(loaderContext, `${options.insert}`);
  58. loaderContext.addBuildDependency(options.insert);
  59. return esModule ? `import insertFn from ${modulePath};` : `var insertFn = require(${modulePath});`;
  60. }
  61. const modulePath = stringifyRequest(loaderContext, `!${_path.default.join(__dirname, "runtime/insertBySelector.js")}`);
  62. return esModule ? `import insertFn from ${modulePath};` : `var insertFn = require(${modulePath});`;
  63. }
  64. function getInsertOptionCode(insertType, options) {
  65. if (insertType === "module-path") {
  66. return `options.insert = insertFn;`;
  67. }
  68. const insert = options.insert ? JSON.stringify(options.insert) : '"head"';
  69. return `options.insert = insertFn.bind(null, ${insert});`;
  70. }
  71. function getImportInsertStyleElementCode(esModule, loaderContext) {
  72. const modulePath = stringifyRequest(loaderContext, `!${_path.default.join(__dirname, "runtime/insertStyleElement.js")}`);
  73. return esModule ? `import insertStyleElement from ${modulePath};` : `var insertStyleElement = require(${modulePath});`;
  74. }
  75. function getStyleHmrCode(esModule, loaderContext, request, lazy) {
  76. const modulePath = stringifyRequest(loaderContext, `!!${request}`);
  77. return `
  78. if (module.hot) {
  79. if (!content.locals || module.hot.invalidate) {
  80. var isEqualLocals = ${_isEqualLocals.default.toString()};
  81. var isNamedExport = ${esModule ? "!content.locals" : false};
  82. var oldLocals = isNamedExport ? namedExport : content.locals;
  83. module.hot.accept(
  84. ${modulePath},
  85. function () {
  86. ${esModule ? `if (!isEqualLocals(oldLocals, isNamedExport ? namedExport : content.locals, isNamedExport)) {
  87. module.hot.invalidate();
  88. return;
  89. }
  90. oldLocals = isNamedExport ? namedExport : content.locals;
  91. ${lazy ? `if (update && refs > 0) {
  92. update(content);
  93. }` : `update(content);`}` : `content = require(${modulePath});
  94. content = content.__esModule ? content.default : content;
  95. ${lazy ? "" : `if (typeof content === 'string') {
  96. content = [[module.id, content, '']];
  97. }`}
  98. if (!isEqualLocals(oldLocals, content.locals)) {
  99. module.hot.invalidate();
  100. return;
  101. }
  102. oldLocals = content.locals;
  103. ${lazy ? `if (update && refs > 0) {
  104. update(content);
  105. }` : `update(content);`}`}
  106. }
  107. )
  108. }
  109. module.hot.dispose(function() {
  110. ${lazy ? `if (update) {
  111. update();
  112. }` : `update();`}
  113. });
  114. }
  115. `;
  116. }
  117. function getLinkHmrCode(esModule, loaderContext, request) {
  118. const modulePath = stringifyRequest(loaderContext, `!!${request}`);
  119. return `
  120. if (module.hot) {
  121. module.hot.accept(
  122. ${modulePath},
  123. function() {
  124. ${esModule ? "update(content);" : `content = require(${modulePath});
  125. content = content.__esModule ? content.default : content;
  126. update(content);`}
  127. }
  128. );
  129. module.hot.dispose(function() {
  130. update();
  131. });
  132. }`;
  133. }
  134. function getdomAPI(isAuto) {
  135. return isAuto ? "isOldIE() ? domAPISingleton : domAPI" : "domAPI";
  136. }
  137. function getImportIsOldIECode(esModule, loaderContext) {
  138. const modulePath = stringifyRequest(loaderContext, `!${_path.default.join(__dirname, "runtime/isOldIE.js")}`);
  139. return esModule ? `import isOldIE from ${modulePath};` : `var isOldIE = require(${modulePath});`;
  140. }
  141. function getStyleTagTransformFnCode(esModule, loaderContext, options, isSingleton) {
  142. if (isSingleton) {
  143. return "";
  144. }
  145. if (typeof options.styleTagTransform !== "undefined") {
  146. const modulePath = stringifyRequest(loaderContext, `${options.styleTagTransform}`);
  147. loaderContext.addBuildDependency(options.styleTagTransform);
  148. return esModule ? `import styleTagTransformFn from ${modulePath};` : `var styleTagTransformFn = require(${modulePath});`;
  149. }
  150. const modulePath = stringifyRequest(loaderContext, `!${_path.default.join(__dirname, "runtime/styleTagTransform.js")}`);
  151. return esModule ? `import styleTagTransformFn from ${modulePath};` : `var styleTagTransformFn = require(${modulePath});`;
  152. }
  153. function getStyleTagTransformFn(options, isSingleton) {
  154. return isSingleton ? "" : `options.styleTagTransform = styleTagTransformFn`;
  155. }
  156. function getExportStyleCode(esModule, loaderContext, request) {
  157. const modulePath = stringifyRequest(loaderContext, `!!${request}`);
  158. return esModule ? `export * from ${modulePath};
  159. export default content && content.locals ? content.locals : undefined;` : "module.exports = content && content.locals || {};";
  160. }
  161. function getExportLazyStyleCode(esModule, loaderContext, request) {
  162. const modulePath = stringifyRequest(loaderContext, `!!${request}`);
  163. return esModule ? `export * from ${modulePath};
  164. export default exported;` : "module.exports = exported;";
  165. }
  166. function getSetAttributesCode(esModule, loaderContext, options) {
  167. let modulePath;
  168. if (typeof options.attributes !== "undefined") {
  169. modulePath = options.attributes.nonce !== "undefined" ? stringifyRequest(loaderContext, `!${_path.default.join(__dirname, "runtime/setAttributesWithAttributesAndNonce.js")}`) : stringifyRequest(loaderContext, `!${_path.default.join(__dirname, "runtime/setAttributesWithAttributes.js")}`);
  170. } else {
  171. modulePath = stringifyRequest(loaderContext, `!${_path.default.join(__dirname, "runtime/setAttributesWithoutAttributes.js")}`);
  172. }
  173. return esModule ? `import setAttributes from ${modulePath};` : `var setAttributes = require(${modulePath});`;
  174. }
  175. // eslint-disable-next-line import/prefer-default-export