1 | const _parenSuffix = ")(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))?([^,{]*)", _cssColonHostRe = new RegExp("(-shadowcsshost" + _parenSuffix, "gim"), _cssColonHostContextRe = new RegExp("(-shadowcsscontext" + _parenSuffix, "gim"), _cssColonSlottedRe = new RegExp("(-shadowcssslotted" + _parenSuffix, "gim"), _polyfillHostNoCombinatorRe = /-shadowcsshost-no-combinator([^\s]*)/, _shadowDOMSelectorsRe = [ /::shadow/g, /::content/g ], _polyfillHostRe = /-shadowcsshost/gim, createSupportsRuleRe = e => new RegExp(`((?<!(^@supports(.*)))|(?<={.*))(${e}\\b)`, "gim"), _colonSlottedRe = createSupportsRuleRe("::slotted"), _colonHostRe = createSupportsRuleRe(":host"), _colonHostContextRe = createSupportsRuleRe(":host-context"), _commentRe = /\/\*\s*[\s\S]*?\*\//g, _commentWithHashRe = /\/\*\s*#\s*source(Mapping)?URL=[\s\S]+?\*\//g, _ruleRe = /(\s*)([^;\{\}]+?)(\s*)((?:{%BLOCK%}?\s*;?)|(?:\s*;))/g, _curlyRe = /([{}])/g, _selectorPartsRe = /(^.*?[^\\])??((:+)(.*)|$)/, processRules = (e, t) => {
|
2 | const o = escapeBlocks(e);
|
3 | let s = 0;
|
4 | return o.escapedString.replace(_ruleRe, ((...e) => {
|
5 | const c = e[2];
|
6 | let r = "", n = e[4], l = "";
|
7 | n && n.startsWith("{%BLOCK%") && (r = o.blocks[s++], n = n.substring(8), l = "{");
|
8 | const a = t({
|
9 | selector: c,
|
10 | content: r
|
11 | });
|
12 | return `${e[1]}${a.selector}${e[3]}${l}${a.content}${n}`;
|
13 | }));
|
14 | }, escapeBlocks = e => {
|
15 | const t = e.split(_curlyRe), o = [], s = [];
|
16 | let c = 0, r = [];
|
17 | for (let e = 0; e < t.length; e++) {
|
18 | const n = t[e];
|
19 | "}" === n && c--, c > 0 ? r.push(n) : (r.length > 0 && (s.push(r.join("")), o.push("%BLOCK%"),
|
20 | r = []), o.push(n)), "{" === n && c++;
|
21 | }
|
22 | return r.length > 0 && (s.push(r.join("")), o.push("%BLOCK%")), {
|
23 | escapedString: o.join(""),
|
24 | blocks: s
|
25 | };
|
26 | }, convertColonRule = (e, t, o) => e.replace(t, ((...e) => {
|
27 | if (e[2]) {
|
28 | const t = e[2].split(","), s = [];
|
29 | for (let c = 0; c < t.length; c++) {
|
30 | const r = t[c].trim();
|
31 | if (!r) break;
|
32 | s.push(o("-shadowcsshost-no-combinator", r, e[3]));
|
33 | }
|
34 | return s.join(",");
|
35 | }
|
36 | return "-shadowcsshost-no-combinator" + e[3];
|
37 | })), colonHostPartReplacer = (e, t, o) => e + t.replace("-shadowcsshost", "") + o, colonHostContextPartReplacer = (e, t, o) => t.indexOf("-shadowcsshost") > -1 ? colonHostPartReplacer(e, t, o) : e + t + o + ", " + t + " " + e + o, injectScopingSelector = (e, t) => e.replace(_selectorPartsRe, ((e, o = "", s, c = "", r = "") => o + t + c + r)), scopeSelectors = (e, t, o, s, c) => processRules(e, (e => {
|
38 | let c = e.selector, r = e.content;
|
39 | return "@" !== e.selector[0] ? c = ((e, t, o, s) => e.split(",").map((e => s && e.indexOf("." + s) > -1 ? e.trim() : ((e, t) => !(e => (e = e.replace(/\[/g, "\\[").replace(/\]/g, "\\]"),
|
40 | new RegExp("^(" + e + ")([>\\s~+[.,{:][\\s\\S]*)?$", "m")))(t).test(e))(e, t) ? ((e, t, o) => {
|
41 | const s = "." + (t = t.replace(/\[is=([^\]]*)\]/g, ((e, ...t) => t[0]))), c = e => {
|
42 | let c = e.trim();
|
43 | if (!c) return "";
|
44 | if (e.indexOf("-shadowcsshost-no-combinator") > -1) c = ((e, t, o) => {
|
45 | if (_polyfillHostRe.lastIndex = 0, _polyfillHostRe.test(e)) {
|
46 | const t = `.${o}`;
|
47 | return e.replace(_polyfillHostNoCombinatorRe, ((e, o) => injectScopingSelector(o, t))).replace(_polyfillHostRe, t + " ");
|
48 | }
|
49 | return t + " " + e;
|
50 | })(e, t, o); else {
|
51 | const t = e.replace(_polyfillHostRe, "");
|
52 | t.length > 0 && (c = injectScopingSelector(t, s));
|
53 | }
|
54 | return c;
|
55 | }, r = (e => {
|
56 | const t = [];
|
57 | let o = 0;
|
58 | return {
|
59 | content: (e = e.replace(/(\[[^\]]*\])/g, ((e, s) => {
|
60 | const c = `__ph-${o}__`;
|
61 | return t.push(s), o++, c;
|
62 | }))).replace(/(:nth-[-\w]+)(\([^)]+\))/g, ((e, s, c) => {
|
63 | const r = `__ph-${o}__`;
|
64 | return t.push(c), o++, s + r;
|
65 | })),
|
66 | placeholders: t
|
67 | };
|
68 | })(e);
|
69 | let n, l = "", a = 0;
|
70 | const p = /( |>|\+|~(?!=))\s*/g;
|
71 | let i = !((e = r.content).indexOf("-shadowcsshost-no-combinator") > -1);
|
72 | for (;null !== (n = p.exec(e)); ) {
|
73 | const t = n[1], o = e.slice(a, n.index).trim();
|
74 | i = i || o.indexOf("-shadowcsshost-no-combinator") > -1, l += `${i ? c(o) : o} ${t} `,
|
75 | a = p.lastIndex;
|
76 | }
|
77 | const h = e.substring(a);
|
78 | return i = i || h.indexOf("-shadowcsshost-no-combinator") > -1, l += i ? c(h) : h,
|
79 | u = r.placeholders, l.replace(/__ph-(\d+)__/g, ((e, t) => u[+t]));
|
80 | var u;
|
81 | })(e, t, o).trim() : e.trim())).join(", "))(e.selector, t, o, s) : (e.selector.startsWith("@media") || e.selector.startsWith("@supports") || e.selector.startsWith("@page") || e.selector.startsWith("@document")) && (r = scopeSelectors(e.content, t, o, s)),
|
82 | {
|
83 | selector: c.replace(/\s{2,}/g, " ").trim(),
|
84 | content: r
|
85 | };
|
86 | })), scopeCss = (e, t, o) => {
|
87 | const s = t + "-h", c = t + "-s", r = e.match(_commentWithHashRe) || [];
|
88 | e = e.replace(_commentRe, "");
|
89 | const n = [];
|
90 | if (o) {
|
91 | const t = e => {
|
92 | const t = `/*!@___${n.length}___*/`, o = `/*!@${e.selector}*/`;
|
93 | return n.push({
|
94 | placeholder: t,
|
95 | comment: o
|
96 | }), e.selector = t + e.selector, e;
|
97 | };
|
98 | e = processRules(e, (e => "@" !== e.selector[0] ? t(e) : e.selector.startsWith("@media") || e.selector.startsWith("@supports") || e.selector.startsWith("@page") || e.selector.startsWith("@document") ? (e.content = processRules(e.content, t),
|
99 | e) : e));
|
100 | }
|
101 | const l = ((e, t, o, s, c) => {
|
102 | const r = ((e, t) => {
|
103 | const o = "." + t + " > ", s = [];
|
104 | return e = e.replace(_cssColonSlottedRe, ((...e) => {
|
105 | if (e[2]) {
|
106 | const t = e[2].trim(), c = e[3], r = o + t + c;
|
107 | let n = "";
|
108 | for (let t = e[4] - 1; t >= 0; t--) {
|
109 | const o = e[5][t];
|
110 | if ("}" === o || "," === o) break;
|
111 | n = o + n;
|
112 | }
|
113 | const l = n + r, a = `${n.trimRight()}${r.trim()}`;
|
114 | if (l.trim() !== a.trim()) {
|
115 | const e = `${a}, ${l}`;
|
116 | s.push({
|
117 | orgSelector: l,
|
118 | updatedSelector: e
|
119 | });
|
120 | }
|
121 | return r;
|
122 | }
|
123 | return "-shadowcsshost-no-combinator" + e[3];
|
124 | })), {
|
125 | selectors: s,
|
126 | cssText: e
|
127 | };
|
128 | })(e = (e => convertColonRule(e, _cssColonHostContextRe, colonHostContextPartReplacer))(e = (e => convertColonRule(e, _cssColonHostRe, colonHostPartReplacer))(e = (e => e.replace(_colonHostContextRe, "$1-shadowcsscontext").replace(_colonHostRe, "$1-shadowcsshost").replace(_colonSlottedRe, "$1-shadowcssslotted"))(e))), s);
|
129 | return e = (e => _shadowDOMSelectorsRe.reduce(((e, t) => e.replace(t, " ")), e))(e = r.cssText),
|
130 | t && (e = scopeSelectors(e, t, o, s)), {
|
131 | cssText: (e = (e = e.replace(/-shadowcsshost-no-combinator/g, `.${o}`)).replace(/>\s*\*\s+([^{, ]+)/gm, " $1 ")).trim(),
|
132 | slottedSelectors: r.selectors
|
133 | };
|
134 | })(e, t, s, c);
|
135 | return e = [ l.cssText, ...r ].join("\n"), o && n.forEach((({placeholder: t, comment: o}) => {
|
136 | e = e.replace(t, o);
|
137 | })), l.slottedSelectors.forEach((t => {
|
138 | e = e.replace(t.orgSelector, t.updatedSelector);
|
139 | })), e;
|
140 | };
|
141 |
|
142 | export { scopeCss }; |
\ | No newline at end of file |