UNPKG

1.38 kBJavaScriptView Raw
1/**
2 * 返回结果对象
3 * @typedef {Object} ReturnedCSS
4 * @property {string} text
5 * @property {CSSRuleList} rules
6 */
7
8/**
9 * @typedef {Object} Result
10 * @property {ReturnedCSS} _global
11 * @property {ReturnedCSS} [moduleId]
12 */
13
14/**
15 * _[仅客户端]_
16 * 获取当前全局 CSS 和所有组件 CSS
17 * @returns {Result}
18 */
19export default () => {
20 if (!__CLIENT__) return {};
21 if (typeof document.styleSheets !== 'object')
22 throw new Error(`document.styleSheets not supported!`);
23 const results = {};
24 const sheets = document.styleSheets;
25 for (let i = 0; i < sheets.length; i++) {
26 const sheet = sheets[i];
27 const owner = sheet.ownerNode;
28 if (!owner) continue;
29 if (owner.getAttribute(__STYLE_TAG_GLOBAL_ATTR_NAME__) === '')
30 results._global = transformCSSStyleSheet(sheet);
31 if (owner.getAttribute(__STYLE_TAG_MODULE_ATTR_NAME__))
32 results[
33 owner.getAttribute(__STYLE_TAG_MODULE_ATTR_NAME__)
34 ] = transformCSSStyleSheet(sheet);
35 }
36 return results;
37};
38
39const transformCSSStyleSheet = sheet => {
40 const rules = sheet.cssRules || sheet.rules;
41 if (typeof rules !== 'object' || !rules.length) return {};
42 return {
43 text: [...rules].map(rule => rule.cssText || '').join('\r\n'),
44 rules
45 };
46};