happy-dom 10.11.0 → 10.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of happy-dom might be problematic. Click here for more details.
- package/cjs/css/CSSParser.cjs +34 -13
- package/cjs/css/CSSParser.cjs.map +1 -1
- package/cjs/css/CSSParser.d.ts +8 -0
- package/cjs/css/CSSParser.d.ts.map +1 -1
- package/lib/css/CSSParser.d.ts +8 -0
- package/lib/css/CSSParser.d.ts.map +1 -1
- package/lib/css/CSSParser.js +34 -13
- package/lib/css/CSSParser.js.map +1 -1
- package/package.json +1 -1
- package/src/css/CSSParser.ts +35 -14
package/cjs/css/CSSParser.cjs
CHANGED
@@ -10,6 +10,7 @@ const CSSKeyframesRule_js_1 = __importDefault(require("./rules/CSSKeyframesRule.
|
|
10
10
|
const CSSMediaRule_js_1 = __importDefault(require("./rules/CSSMediaRule.cjs"));
|
11
11
|
const CSSContainerRule_js_1 = __importDefault(require("./rules/CSSContainerRule.cjs"));
|
12
12
|
const CSSSupportsRule_js_1 = __importDefault(require("./rules/CSSSupportsRule.cjs"));
|
13
|
+
const SelectorParser_js_1 = __importDefault(require("../query-selector/SelectorParser.cjs"));
|
13
14
|
const COMMENT_REGEXP = /\/\*[\s\S]*?\*\//gm;
|
14
15
|
/**
|
15
16
|
* CSS parser.
|
@@ -88,22 +89,26 @@ class CSSParser {
|
|
88
89
|
(parentRule.type === CSSRule_js_1.default.MEDIA_RULE ||
|
89
90
|
parentRule.type === CSSRule_js_1.default.CONTAINER_RULE ||
|
90
91
|
parentRule.type === CSSRule_js_1.default.SUPPORTS_RULE)) {
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
92
|
+
if (this.validateSelectorText(selectorText)) {
|
93
|
+
const newRule = new CSSStyleRule_js_1.default();
|
94
|
+
newRule.selectorText = selectorText;
|
95
|
+
newRule.parentStyleSheet = parentStyleSheet;
|
96
|
+
newRule.parentRule = parentRule;
|
97
|
+
parentRule.cssRules.push(newRule);
|
98
|
+
parentRule = newRule;
|
99
|
+
}
|
97
100
|
}
|
98
101
|
else {
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
102
|
+
if (this.validateSelectorText(selectorText)) {
|
103
|
+
const newRule = new CSSStyleRule_js_1.default();
|
104
|
+
newRule.selectorText = selectorText;
|
105
|
+
newRule.parentStyleSheet = parentStyleSheet;
|
106
|
+
newRule.parentRule = parentRule;
|
107
|
+
if (!parentRule) {
|
108
|
+
cssRules.push(newRule);
|
109
|
+
}
|
110
|
+
parentRule = newRule;
|
105
111
|
}
|
106
|
-
parentRule = newRule;
|
107
112
|
}
|
108
113
|
stack.push(parentRule);
|
109
114
|
}
|
@@ -128,6 +133,22 @@ class CSSParser {
|
|
128
133
|
}
|
129
134
|
return cssRules;
|
130
135
|
}
|
136
|
+
/**
|
137
|
+
* Validates a selector text.
|
138
|
+
*
|
139
|
+
* @see https://www.w3.org/TR/CSS21/syndata.html#rule-sets
|
140
|
+
* @param selectorText Selector text.
|
141
|
+
* @returns True if valid, false otherwise.
|
142
|
+
*/
|
143
|
+
static validateSelectorText(selectorText) {
|
144
|
+
try {
|
145
|
+
SelectorParser_js_1.default.getSelectorGroups(selectorText);
|
146
|
+
}
|
147
|
+
catch (e) {
|
148
|
+
return false;
|
149
|
+
}
|
150
|
+
return true;
|
151
|
+
}
|
131
152
|
}
|
132
153
|
exports.default = CSSParser;
|
133
154
|
//# sourceMappingURL=CSSParser.cjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CSSParser.cjs","sourceRoot":"","sources":["../../src/css/CSSParser.ts"],"names":[],"mappings":";;;;;AAAA,8DAAmC;AAEnC,8EAAmD;AACnD,oFAAyD;AACzD,sFAA2D;AAC3D,8EAAmD;AACnD,sFAA2D;AAC3D,oFAAyD;
|
1
|
+
{"version":3,"file":"CSSParser.cjs","sourceRoot":"","sources":["../../src/css/CSSParser.ts"],"names":[],"mappings":"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"}
|
package/cjs/css/CSSParser.d.ts
CHANGED
@@ -12,5 +12,13 @@ export default class CSSParser {
|
|
12
12
|
* @returns Root element.
|
13
13
|
*/
|
14
14
|
static parseFromString(parentStyleSheet: CSSStyleSheet, cssText: string): CSSRule[];
|
15
|
+
/**
|
16
|
+
* Validates a selector text.
|
17
|
+
*
|
18
|
+
* @see https://www.w3.org/TR/CSS21/syndata.html#rule-sets
|
19
|
+
* @param selectorText Selector text.
|
20
|
+
* @returns True if valid, false otherwise.
|
21
|
+
*/
|
22
|
+
private static validateSelectorText;
|
15
23
|
}
|
16
24
|
//# sourceMappingURL=CSSParser.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CSSParser.d.ts","sourceRoot":"","sources":["../../src/css/CSSParser.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,aAAa,MAAM,oBAAoB,CAAC;
|
1
|
+
{"version":3,"file":"CSSParser.d.ts","sourceRoot":"","sources":["../../src/css/CSSParser.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAW/C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC7B;;;;;;OAMG;WACW,eAAe,CAAC,gBAAgB,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE;IA6H1F;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAQnC"}
|
package/lib/css/CSSParser.d.ts
CHANGED
@@ -12,5 +12,13 @@ export default class CSSParser {
|
|
12
12
|
* @returns Root element.
|
13
13
|
*/
|
14
14
|
static parseFromString(parentStyleSheet: CSSStyleSheet, cssText: string): CSSRule[];
|
15
|
+
/**
|
16
|
+
* Validates a selector text.
|
17
|
+
*
|
18
|
+
* @see https://www.w3.org/TR/CSS21/syndata.html#rule-sets
|
19
|
+
* @param selectorText Selector text.
|
20
|
+
* @returns True if valid, false otherwise.
|
21
|
+
*/
|
22
|
+
private static validateSelectorText;
|
15
23
|
}
|
16
24
|
//# sourceMappingURL=CSSParser.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CSSParser.d.ts","sourceRoot":"","sources":["../../src/css/CSSParser.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,aAAa,MAAM,oBAAoB,CAAC;
|
1
|
+
{"version":3,"file":"CSSParser.d.ts","sourceRoot":"","sources":["../../src/css/CSSParser.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAW/C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC7B;;;;;;OAMG;WACW,eAAe,CAAC,gBAAgB,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE;IA6H1F;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAQnC"}
|
package/lib/css/CSSParser.js
CHANGED
@@ -5,6 +5,7 @@ import CSSKeyframesRule from './rules/CSSKeyframesRule.js';
|
|
5
5
|
import CSSMediaRule from './rules/CSSMediaRule.js';
|
6
6
|
import CSSContainerRule from './rules/CSSContainerRule.js';
|
7
7
|
import CSSSupportsRule from './rules/CSSSupportsRule.js';
|
8
|
+
import SelectorParser from '../query-selector/SelectorParser.js';
|
8
9
|
const COMMENT_REGEXP = /\/\*[\s\S]*?\*\//gm;
|
9
10
|
/**
|
10
11
|
* CSS parser.
|
@@ -83,22 +84,26 @@ export default class CSSParser {
|
|
83
84
|
(parentRule.type === CSSRule.MEDIA_RULE ||
|
84
85
|
parentRule.type === CSSRule.CONTAINER_RULE ||
|
85
86
|
parentRule.type === CSSRule.SUPPORTS_RULE)) {
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
87
|
+
if (this.validateSelectorText(selectorText)) {
|
88
|
+
const newRule = new CSSStyleRule();
|
89
|
+
newRule.selectorText = selectorText;
|
90
|
+
newRule.parentStyleSheet = parentStyleSheet;
|
91
|
+
newRule.parentRule = parentRule;
|
92
|
+
parentRule.cssRules.push(newRule);
|
93
|
+
parentRule = newRule;
|
94
|
+
}
|
92
95
|
}
|
93
96
|
else {
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
97
|
+
if (this.validateSelectorText(selectorText)) {
|
98
|
+
const newRule = new CSSStyleRule();
|
99
|
+
newRule.selectorText = selectorText;
|
100
|
+
newRule.parentStyleSheet = parentStyleSheet;
|
101
|
+
newRule.parentRule = parentRule;
|
102
|
+
if (!parentRule) {
|
103
|
+
cssRules.push(newRule);
|
104
|
+
}
|
105
|
+
parentRule = newRule;
|
100
106
|
}
|
101
|
-
parentRule = newRule;
|
102
107
|
}
|
103
108
|
stack.push(parentRule);
|
104
109
|
}
|
@@ -123,5 +128,21 @@ export default class CSSParser {
|
|
123
128
|
}
|
124
129
|
return cssRules;
|
125
130
|
}
|
131
|
+
/**
|
132
|
+
* Validates a selector text.
|
133
|
+
*
|
134
|
+
* @see https://www.w3.org/TR/CSS21/syndata.html#rule-sets
|
135
|
+
* @param selectorText Selector text.
|
136
|
+
* @returns True if valid, false otherwise.
|
137
|
+
*/
|
138
|
+
static validateSelectorText(selectorText) {
|
139
|
+
try {
|
140
|
+
SelectorParser.getSelectorGroups(selectorText);
|
141
|
+
}
|
142
|
+
catch (e) {
|
143
|
+
return false;
|
144
|
+
}
|
145
|
+
return true;
|
146
|
+
}
|
126
147
|
}
|
127
148
|
//# sourceMappingURL=CSSParser.js.map
|
package/lib/css/CSSParser.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CSSParser.js","sourceRoot":"","sources":["../../src/css/CSSParser.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,YAAY,MAAM,yBAAyB,CAAC;AACnD,OAAO,eAAe,MAAM,4BAA4B,CAAC;AACzD,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,YAAY,MAAM,yBAAyB,CAAC;AACnD,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,eAAe,MAAM,4BAA4B,CAAC;
|
1
|
+
{"version":3,"file":"CSSParser.js","sourceRoot":"","sources":["../../src/css/CSSParser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/css/CSSParser.ts
CHANGED
@@ -6,6 +6,7 @@ import CSSKeyframesRule from './rules/CSSKeyframesRule.js';
|
|
6
6
|
import CSSMediaRule from './rules/CSSMediaRule.js';
|
7
7
|
import CSSContainerRule from './rules/CSSContainerRule.js';
|
8
8
|
import CSSSupportsRule from './rules/CSSSupportsRule.js';
|
9
|
+
import SelectorParser from '../query-selector/SelectorParser.js';
|
9
10
|
|
10
11
|
const COMMENT_REGEXP = /\/\*[\s\S]*?\*\//gm;
|
11
12
|
|
@@ -96,23 +97,27 @@ export default class CSSParser {
|
|
96
97
|
parentRule.type === CSSRule.CONTAINER_RULE ||
|
97
98
|
parentRule.type === CSSRule.SUPPORTS_RULE)
|
98
99
|
) {
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
100
|
+
if (this.validateSelectorText(selectorText)) {
|
101
|
+
const newRule = new CSSStyleRule();
|
102
|
+
(<string>newRule.selectorText) = selectorText;
|
103
|
+
newRule.parentStyleSheet = parentStyleSheet;
|
104
|
+
newRule.parentRule = parentRule;
|
105
|
+
(<CSSMediaRule>parentRule).cssRules.push(newRule);
|
106
|
+
parentRule = newRule;
|
107
|
+
}
|
105
108
|
} else {
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
109
|
+
if (this.validateSelectorText(selectorText)) {
|
110
|
+
const newRule = new CSSStyleRule();
|
111
|
+
(<string>newRule.selectorText) = selectorText;
|
112
|
+
newRule.parentStyleSheet = parentStyleSheet;
|
113
|
+
newRule.parentRule = parentRule;
|
110
114
|
|
111
|
-
|
112
|
-
|
113
|
-
|
115
|
+
if (!parentRule) {
|
116
|
+
cssRules.push(newRule);
|
117
|
+
}
|
114
118
|
|
115
|
-
|
119
|
+
parentRule = newRule;
|
120
|
+
}
|
116
121
|
}
|
117
122
|
|
118
123
|
stack.push(parentRule);
|
@@ -140,4 +145,20 @@ export default class CSSParser {
|
|
140
145
|
|
141
146
|
return cssRules;
|
142
147
|
}
|
148
|
+
|
149
|
+
/**
|
150
|
+
* Validates a selector text.
|
151
|
+
*
|
152
|
+
* @see https://www.w3.org/TR/CSS21/syndata.html#rule-sets
|
153
|
+
* @param selectorText Selector text.
|
154
|
+
* @returns True if valid, false otherwise.
|
155
|
+
*/
|
156
|
+
private static validateSelectorText(selectorText: string): boolean {
|
157
|
+
try {
|
158
|
+
SelectorParser.getSelectorGroups(selectorText);
|
159
|
+
} catch (e) {
|
160
|
+
return false;
|
161
|
+
}
|
162
|
+
return true;
|
163
|
+
}
|
143
164
|
}
|