extractStyle.js 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = extractStyle;
  7. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  8. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  9. var _useCacheToken = require("./hooks/useCacheToken");
  10. var _useCSSVarRegister = require("./hooks/useCSSVarRegister");
  11. var _useStyleRegister = require("./hooks/useStyleRegister");
  12. var _util = require("./util");
  13. var _cacheMapUtil = require("./util/cacheMapUtil");
  14. var ExtractStyleFns = (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _useStyleRegister.STYLE_PREFIX, _useStyleRegister.extract), _useCacheToken.TOKEN_PREFIX, _useCacheToken.extract), _useCSSVarRegister.CSS_VAR_PREFIX, _useCSSVarRegister.extract);
  15. function isNotNull(value) {
  16. return value !== null;
  17. }
  18. function extractStyle(cache, options) {
  19. var _ref = typeof options === 'boolean' ? {
  20. plain: options
  21. } : options || {},
  22. _ref$plain = _ref.plain,
  23. plain = _ref$plain === void 0 ? false : _ref$plain,
  24. _ref$types = _ref.types,
  25. types = _ref$types === void 0 ? ['style', 'token', 'cssVar'] : _ref$types,
  26. _ref$once = _ref.once,
  27. once = _ref$once === void 0 ? false : _ref$once;
  28. var matchPrefixRegexp = new RegExp("^(".concat((typeof types === 'string' ? [types] : types).join('|'), ")%"));
  29. // prefix with `style` is used for `useStyleRegister` to cache style context
  30. var styleKeys = Array.from(cache.cache.keys()).filter(function (key) {
  31. return matchPrefixRegexp.test(key);
  32. });
  33. // Common effect styles like animation
  34. var effectStyles = {};
  35. // Mapping of cachePath to style hash
  36. var cachePathMap = {};
  37. var styleText = '';
  38. styleKeys.map(function (key) {
  39. if (once && cache.extracted.has(key)) {
  40. return null; // Skip if already extracted
  41. }
  42. var cachePath = key.replace(matchPrefixRegexp, '').replace(/%/g, '|');
  43. var _key$split = key.split('%'),
  44. _key$split2 = (0, _slicedToArray2.default)(_key$split, 1),
  45. prefix = _key$split2[0];
  46. var extractFn = ExtractStyleFns[prefix];
  47. var extractedStyle = extractFn(cache.cache.get(key)[1], effectStyles, {
  48. plain: plain
  49. });
  50. if (!extractedStyle) {
  51. return null;
  52. }
  53. var _extractedStyle = (0, _slicedToArray2.default)(extractedStyle, 3),
  54. order = _extractedStyle[0],
  55. styleId = _extractedStyle[1],
  56. styleStr = _extractedStyle[2];
  57. if (key.startsWith('style')) {
  58. cachePathMap[cachePath] = styleId;
  59. }
  60. // record that this style has been extracted
  61. cache.extracted.add(key);
  62. return [order, styleStr];
  63. }).filter(isNotNull).sort(function (_ref2, _ref3) {
  64. var _ref4 = (0, _slicedToArray2.default)(_ref2, 1),
  65. o1 = _ref4[0];
  66. var _ref5 = (0, _slicedToArray2.default)(_ref3, 1),
  67. o2 = _ref5[0];
  68. return o1 - o2;
  69. }).forEach(function (_ref6) {
  70. var _ref7 = (0, _slicedToArray2.default)(_ref6, 2),
  71. style = _ref7[1];
  72. styleText += style;
  73. });
  74. // ==================== Fill Cache Path ====================
  75. styleText += (0, _util.toStyleStr)(".".concat(_cacheMapUtil.ATTR_CACHE_MAP, "{content:\"").concat((0, _cacheMapUtil.serialize)(cachePathMap), "\";}"), undefined, undefined, (0, _defineProperty2.default)({}, _cacheMapUtil.ATTR_CACHE_MAP, _cacheMapUtil.ATTR_CACHE_MAP), plain);
  76. return styleText;
  77. }