extractStyle.js 3.1 KB

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