cssstyle 4.2.0 → 4.3.0

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.
package/README.md CHANGED
@@ -1,14 +1,10 @@
1
1
  # CSSStyleDeclaration
2
2
 
3
- A Node JS implementation of the CSS Object Model [CSSStyleDeclaration interface](https://www.w3.org/TR/cssom-1/#the-cssstyledeclaration-interface).
3
+ A Node.js implementation of the CSS Object Model [`CSSStyleDeclaration` class](https://drafts.csswg.org/cssom/#the-cssstyledeclaration-interface).
4
4
 
5
- [![NpmVersion](https://img.shields.io/npm/v/cssstyle.svg)](https://www.npmjs.com/package/cssstyle) [![Build Status](https://travis-ci.org/jsdom/cssstyle.svg?branch=main)](https://travis-ci.org/jsdom/cssstyle) [![codecov](https://codecov.io/gh/jsdom/cssstyle/branch/main/graph/badge.svg)](https://codecov.io/gh/jsdom/cssstyle)
5
+ ## Background
6
6
 
7
- ---
8
-
9
- #### Background
10
-
11
- This package is an extension of the CSSStyleDeclaration class in Nikita Vasilyev's [CSSOM](https://github.com/NV/CSSOM) with added support for CSS 2 & 3 properties. The primary use case is for testing browser code in a Node environment.
7
+ This package is an extension of the `CSSStyleDeclaration` class in Nikita Vasilyev's [CSSOM](https://github.com/NV/CSSOM), with added support for modern specifications. The primary use case is for testing browser code in a Node environment.
12
8
 
13
9
  It was originally created by Chad Walker, it is now maintained by the jsdom community.
14
10
 
@@ -1,6 +1,6 @@
1
1
 
2
2
  'use strict';
3
- // autogenerated - 2025-01-09
3
+ // autogenerated - 2025-03-09
4
4
  // https://www.w3.org/Style/CSS/all-properties.en.html
5
5
 
6
6
  module.exports = new Set([
package/lib/parsers.js CHANGED
@@ -4,7 +4,8 @@
4
4
  ********************************************************************/
5
5
  'use strict';
6
6
 
7
- const { cssCalc, isColor, resolve } = require('@asamuzakjp/css-color');
7
+ const { resolve: resolveColor, utils } = require('@asamuzakjp/css-color');
8
+ const { cssCalc, isColor, isGradient, splitValue } = utils;
8
9
 
9
10
  exports.TYPES = {
10
11
  INTEGER: 1,
@@ -19,6 +20,7 @@ exports.TYPES = {
19
20
  NULL_OR_EMPTY_STR: 10,
20
21
  CALC: 11,
21
22
  VAR: 12,
23
+ GRADIENT: 13,
22
24
  };
23
25
 
24
26
  // regular expressions
@@ -78,6 +80,9 @@ exports.valueType = function valueType(val) {
78
80
  if (isColor(val)) {
79
81
  return exports.TYPES.COLOR;
80
82
  }
83
+ if (isGradient(val)) {
84
+ return exports.TYPES.GRADIENT;
85
+ }
81
86
 
82
87
  switch (val.toLowerCase()) {
83
88
  // the following are deprecated in CSS3
@@ -184,6 +189,16 @@ exports.parseMeasurement = function parseMeasurement(val) {
184
189
  return exports.parsePercent(val);
185
190
  };
186
191
 
192
+ exports.parseInheritingMeasurement = function parseInheritingMeasurement(v) {
193
+ if (String(v).toLowerCase() === 'auto') {
194
+ return 'auto';
195
+ }
196
+ if (String(v).toLowerCase() === 'inherit') {
197
+ return 'inherit';
198
+ }
199
+ return exports.parseMeasurement(v);
200
+ };
201
+
187
202
  exports.parseUrl = function parseUrl(val) {
188
203
  var type = exports.valueType(val);
189
204
  if (type === exports.TYPES.NULL_OR_EMPTY_STR) {
@@ -258,7 +273,7 @@ exports.parseColor = function parseColor(val) {
258
273
  if (/^[a-z]+$/i.test(val) && type === exports.TYPES.COLOR) {
259
274
  return val;
260
275
  }
261
- var res = resolve(val, {
276
+ var res = resolveColor(val, {
262
277
  format: 'specifiedValue',
263
278
  });
264
279
  if (res) {
@@ -310,6 +325,40 @@ exports.parseKeyword = function parseKeyword(val, valid_keywords) {
310
325
  return undefined;
311
326
  };
312
327
 
328
+ exports.parseImage = function parseImage(val) {
329
+ if (/^(?:none|inherit)$/i.test(val)) {
330
+ return val;
331
+ }
332
+ var type = exports.valueType(val);
333
+ if (type === exports.TYPES.NULL_OR_EMPTY_STR || type === exports.TYPES.VAR) {
334
+ return val;
335
+ }
336
+ var values = splitValue(val, ',');
337
+ var isImage = !!values.length;
338
+ var i;
339
+ for (i = 0; i < values.length; i++) {
340
+ var image = values[i];
341
+ var t = exports.valueType(image);
342
+ if (t === exports.TYPES.NULL_OR_EMPTY_STR) {
343
+ return image;
344
+ }
345
+ if (t === exports.TYPES.GRADIENT || /^(?:none|inherit)$/i.test(image)) {
346
+ continue;
347
+ }
348
+ var imageUrl = exports.parseUrl(image);
349
+ if (exports.valueType(imageUrl) === exports.TYPES.URL) {
350
+ values[i] = imageUrl;
351
+ } else {
352
+ isImage = false;
353
+ break;
354
+ }
355
+ }
356
+ if (isImage) {
357
+ return values.join(', ');
358
+ }
359
+ return undefined;
360
+ };
361
+
313
362
  // utility to translate from border-width to borderWidth
314
363
  var dashedToCamelCase = function (dashed) {
315
364
  var i;
@@ -7,10 +7,7 @@ var parse = function parse(v) {
7
7
  if (parsed !== undefined) {
8
8
  return parsed;
9
9
  }
10
- if (
11
- parsers.valueType(v) === parsers.TYPES.KEYWORD &&
12
- (v.toLowerCase() === 'transparent' || v.toLowerCase() === 'inherit')
13
- ) {
10
+ if (parsers.valueType(v) === parsers.TYPES.KEYWORD && v.toLowerCase() === 'inherit') {
14
11
  return v;
15
12
  }
16
13
  return undefined;
@@ -3,16 +3,10 @@
3
3
  var parsers = require('../parsers');
4
4
 
5
5
  var parse = function parse(v) {
6
- var parsed = parsers.parseUrl(v);
6
+ var parsed = parsers.parseImage(v);
7
7
  if (parsed !== undefined) {
8
8
  return parsed;
9
9
  }
10
- if (
11
- parsers.valueType(v) === parsers.TYPES.KEYWORD &&
12
- (v.toLowerCase() === 'none' || v.toLowerCase() === 'inherit')
13
- ) {
14
- return v;
15
- }
16
10
  return undefined;
17
11
  };
18
12
 
@@ -3,23 +3,22 @@
3
3
  var parsers = require('../parsers');
4
4
  var implicitSetter = require('../parsers').implicitSetter;
5
5
 
6
- module.exports.isValid = function parse(v) {
7
- if (typeof v !== 'string') {
8
- return false;
9
- }
10
- return (
11
- v === '' || v.toLowerCase() === 'transparent' || parsers.valueType(v) === parsers.TYPES.COLOR
12
- );
13
- };
14
- var isValid = module.exports.isValid;
15
-
16
6
  var parser = function (v) {
17
- if (isValid(v)) {
18
- return v.toLowerCase();
7
+ var parsed = parsers.parseColor(v);
8
+ if (parsed !== undefined) {
9
+ return parsed;
10
+ }
11
+ if (parsers.valueType(v) === parsers.TYPES.KEYWORD && v.toLowerCase() === 'inherit') {
12
+ return v;
19
13
  }
20
14
  return undefined;
21
15
  };
22
16
 
17
+ module.exports.isValid = function parse(v) {
18
+ return parser(v) !== undefined;
19
+ };
20
+ var isValid = module.exports.isValid;
21
+
23
22
  module.exports.definition = {
24
23
  set: implicitSetter('border', 'color', isValid, parser),
25
24
  get: function () {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var parseMeasurement = require('../parsers').parseMeasurement;
3
+ var parseMeasurement = require('../parsers').parseInheritingMeasurement;
4
4
 
5
5
  module.exports.definition = {
6
6
  set: function (v) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var parseMeasurement = require('../parsers').parseMeasurement;
3
+ var parseMeasurement = require('../parsers').parseInheritingMeasurement;
4
4
 
5
5
  module.exports.definition = {
6
6
  set: function (v) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var parseMeasurement = require('../parsers').parseMeasurement;
3
+ var parseMeasurement = require('../parsers').parseInheritingMeasurement;
4
4
 
5
5
  module.exports.definition = {
6
6
  set: function (v) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var parseMeasurement = require('../parsers').parseMeasurement;
3
+ var parseMeasurement = require('../parsers').parseInheritingMeasurement;
4
4
 
5
5
  module.exports.definition = {
6
6
  set: function (v) {
package/lib/properties.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- // autogenerated - 1/9/2025
3
+ // autogenerated - 3/9/2025
4
4
 
5
5
  /*
6
6
  *
@@ -75,7 +75,7 @@ var backgroundColor_local_var_parse = function parse(v) {
75
75
  if (parsed !== undefined) {
76
76
  return parsed;
77
77
  }
78
- if (external_dependency_parsers_0.valueType(v) === external_dependency_parsers_0.TYPES.KEYWORD && (v.toLowerCase() === 'transparent' || v.toLowerCase() === 'inherit')) {
78
+ if (external_dependency_parsers_0.valueType(v) === external_dependency_parsers_0.TYPES.KEYWORD && v.toLowerCase() === 'inherit') {
79
79
  return v;
80
80
  }
81
81
  return undefined;
@@ -99,13 +99,10 @@ backgroundColor_export_definition = {
99
99
  };
100
100
  var backgroundImage_export_isValid, backgroundImage_export_definition;
101
101
  var backgroundImage_local_var_parse = function parse(v) {
102
- var parsed = external_dependency_parsers_0.parseUrl(v);
102
+ var parsed = external_dependency_parsers_0.parseImage(v);
103
103
  if (parsed !== undefined) {
104
104
  return parsed;
105
105
  }
106
- if (external_dependency_parsers_0.valueType(v) === external_dependency_parsers_0.TYPES.KEYWORD && (v.toLowerCase() === 'none' || v.toLowerCase() === 'inherit')) {
107
- return v;
108
- }
109
106
  return undefined;
110
107
  };
111
108
  backgroundImage_export_isValid = function isValid(v) {
@@ -297,19 +294,20 @@ borderStyle_export_definition = {
297
294
  configurable: true
298
295
  };
299
296
  var borderColor_export_isValid, borderColor_export_definition;
300
- borderColor_export_isValid = function parse(v) {
301
- if (typeof v !== 'string') {
302
- return false;
303
- }
304
- return v === '' || v.toLowerCase() === 'transparent' || external_dependency_parsers_0.valueType(v) === external_dependency_parsers_0.TYPES.COLOR;
305
- };
306
- var borderColor_local_var_isValid = borderColor_export_isValid;
307
297
  var borderColor_local_var_parser = function (v) {
308
- if (borderColor_local_var_isValid(v)) {
309
- return v.toLowerCase();
298
+ var parsed = external_dependency_parsers_0.parseColor(v);
299
+ if (parsed !== undefined) {
300
+ return parsed;
301
+ }
302
+ if (external_dependency_parsers_0.valueType(v) === external_dependency_parsers_0.TYPES.KEYWORD && v.toLowerCase() === 'inherit') {
303
+ return v;
310
304
  }
311
305
  return undefined;
312
306
  };
307
+ borderColor_export_isValid = function parse(v) {
308
+ return borderColor_local_var_parser(v) !== undefined;
309
+ };
310
+ var borderColor_local_var_isValid = borderColor_export_isValid;
313
311
  borderColor_export_definition = {
314
312
  set: external_dependency_parsers_0.implicitSetter('border', 'color', borderColor_local_var_isValid, borderColor_local_var_parser),
315
313
  get: function () {
@@ -678,7 +676,7 @@ borderTop_export_definition = {
678
676
  var bottom_export_definition;
679
677
  bottom_export_definition = {
680
678
  set: function (v) {
681
- this._setProperty('bottom', external_dependency_parsers_0.parseMeasurement(v));
679
+ this._setProperty('bottom', external_dependency_parsers_0.parseInheritingMeasurement(v));
682
680
  },
683
681
  get: function () {
684
682
  return this.getPropertyValue('bottom');
@@ -1054,7 +1052,7 @@ height_export_definition = {
1054
1052
  var left_export_definition;
1055
1053
  left_export_definition = {
1056
1054
  set: function (v) {
1057
- this._setProperty('left', external_dependency_parsers_0.parseMeasurement(v));
1055
+ this._setProperty('left', external_dependency_parsers_0.parseInheritingMeasurement(v));
1058
1056
  },
1059
1057
  get: function () {
1060
1058
  return this.getPropertyValue('left');
@@ -1335,7 +1333,7 @@ paddingTop_export_definition = {
1335
1333
  var right_export_definition;
1336
1334
  right_export_definition = {
1337
1335
  set: function (v) {
1338
- this._setProperty('right', external_dependency_parsers_0.parseMeasurement(v));
1336
+ this._setProperty('right', external_dependency_parsers_0.parseInheritingMeasurement(v));
1339
1337
  },
1340
1338
  get: function () {
1341
1339
  return this.getPropertyValue('right');
@@ -1390,7 +1388,7 @@ textUnderlineColor_export_definition = {
1390
1388
  var top_export_definition;
1391
1389
  top_export_definition = {
1392
1390
  set: function (v) {
1393
- this._setProperty('top', external_dependency_parsers_0.parseMeasurement(v));
1391
+ this._setProperty('top', external_dependency_parsers_0.parseInheritingMeasurement(v));
1394
1392
  },
1395
1393
  get: function () {
1396
1394
  return this.getPropertyValue('top');
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "CSSStyleDeclaration",
7
7
  "StyleSheet"
8
8
  ],
9
- "version": "4.2.0",
9
+ "version": "4.3.0",
10
10
  "homepage": "https://github.com/jsdom/cssstyle",
11
11
  "maintainers": [
12
12
  {
@@ -37,21 +37,21 @@
37
37
  ],
38
38
  "main": "./lib/CSSStyleDeclaration.js",
39
39
  "dependencies": {
40
- "@asamuzakjp/css-color": "^2.8.2",
41
- "rrweb-cssom": "^0.7.1"
40
+ "@asamuzakjp/css-color": "^3.1.1",
41
+ "rrweb-cssom": "^0.8.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@babel/generator": "^7.25.6",
45
- "@babel/parser": "^7.25.6",
46
- "@babel/traverse": "^7.25.6",
47
- "@babel/types": "^7.25.6",
48
- "eslint": "^9.10.0",
49
- "eslint-config-prettier": "^9.1.0",
50
- "eslint-plugin-prettier": "^5.2.1",
51
- "globals": "^15.9.0",
44
+ "@babel/generator": "^7.26.9",
45
+ "@babel/parser": "^7.26.9",
46
+ "@babel/traverse": "^7.26.9",
47
+ "@babel/types": "^7.26.9",
48
+ "eslint": "^9.22.0",
49
+ "eslint-config-prettier": "^10.1.1",
50
+ "eslint-plugin-prettier": "^5.2.3",
51
+ "globals": "^16.0.0",
52
52
  "npm-run-all": "^4.1.5",
53
- "prettier": "^3.3.3",
54
- "resolve": "^1.22.1"
53
+ "prettier": "^3.5.3",
54
+ "resolve": "^1.22.10"
55
55
  },
56
56
  "scripts": {
57
57
  "download": "node ./scripts/downloadLatestProperties.mjs && eslint lib/allProperties.js --fix",
@@ -62,8 +62,7 @@
62
62
  "lint:fix": "eslint --fix --max-warnings 0",
63
63
  "prepublishOnly": "npm run lint && npm run test",
64
64
  "test": "npm run generate && node --test",
65
- "test-ci": "npm run lint && npm run test",
66
- "update-authors": "git log --format=\"%aN <%aE>\" | sort -f | uniq > AUTHORS"
65
+ "test-ci": "npm run lint && npm run test"
67
66
  },
68
67
  "license": "MIT",
69
68
  "engines": {