stylelint-browser-compat 1.0.0-beta.1

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.
Files changed (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +91 -0
  3. package/lib/at-rules/at_rules_name_set.js +16 -0
  4. package/lib/at-rules/collect_features.js +145 -0
  5. package/lib/at-rules/counter-style/collect_features.js +41 -0
  6. package/lib/at-rules/counter-style/descriptor_name_set.js +16 -0
  7. package/lib/at-rules/document/collect_features.js +46 -0
  8. package/lib/at-rules/document/regexp/collect_features.js +30 -0
  9. package/lib/at-rules/font-face/__font_type/collect_features.js +79 -0
  10. package/lib/at-rules/font-face/collect_features.js +67 -0
  11. package/lib/at-rules/font-face/descriptor_name_set.js +16 -0
  12. package/lib/at-rules/font-feature-values/at_rules_name_set.js +16 -0
  13. package/lib/at-rules/font-feature-values/collect_features.js +30 -0
  14. package/lib/at-rules/keyframes/collect_features.js +29 -0
  15. package/lib/at-rules/media/collect_features.js +118 -0
  16. package/lib/at-rules/media/media_feature_name_map.js +8 -0
  17. package/lib/at-rules/page/collect_features.js +82 -0
  18. package/lib/at-rules/page/descriptor_name_set.js +16 -0
  19. package/lib/at-rules/page/size/collect_features.js +55 -0
  20. package/lib/at-rules/property/collect_features.js +60 -0
  21. package/lib/at-rules/property/descriptor_name_set.js +16 -0
  22. package/lib/at-rules/scroll-timeline/collect_features.js +60 -0
  23. package/lib/at-rules/scroll-timeline/descriptor_name_set.js +16 -0
  24. package/lib/collect_features.js +69 -0
  25. package/lib/index.js +5 -0
  26. package/lib/is_supported.js +75 -0
  27. package/lib/options.js +20 -0
  28. package/lib/parse_browserslist_version.js +132 -0
  29. package/lib/properties/-moz-orient/collect_features.js +61 -0
  30. package/lib/properties/-moz-user-input/collect_features.js +71 -0
  31. package/lib/properties/animation-direction/collect_features.js +53 -0
  32. package/lib/properties/animation-timing-function/collect_features.js +51 -0
  33. package/lib/properties/appearance/collect_features.js +76 -0
  34. package/lib/properties/background/background-clip/collect_features.js +59 -0
  35. package/lib/properties/background/background-origin/collect_features.js +59 -0
  36. package/lib/properties/background/background-size/collect_features.js +106 -0
  37. package/lib/properties/background/collect_features.js +104 -0
  38. package/lib/properties/background/multiple_backgrounds/collect_features.js +39 -0
  39. package/lib/properties/background-attachment/collect_features.js +70 -0
  40. package/lib/properties/background-clip/collect_features.js +55 -0
  41. package/lib/properties/background-image/collect_features.js +133 -0
  42. package/lib/properties/background-image/svg_images/collect_features.js +58 -0
  43. package/lib/properties/background-origin/collect_features.js +42 -0
  44. package/lib/properties/background-position/collect_features.js +117 -0
  45. package/lib/properties/background-position-x/collect_features.js +36 -0
  46. package/lib/properties/background-position-y/collect_features.js +36 -0
  47. package/lib/properties/background-repeat/collect_features.js +102 -0
  48. package/lib/properties/background-repeat/round_space/collect_features.js +54 -0
  49. package/lib/properties/background-size/collect_features.js +38 -0
  50. package/lib/properties/block-size/collect_features.js +77 -0
  51. package/lib/properties/border-bottom-left-radius/border-bottom-right-radius/collect_features.js +57 -0
  52. package/lib/properties/border-bottom-left-radius/collect_features.js +57 -0
  53. package/lib/properties/border-bottom-right-radius/collect_features.js +57 -0
  54. package/lib/properties/border-radius/collect_features.js +61 -0
  55. package/lib/properties/border-top-left-radius/collect_features.js +57 -0
  56. package/lib/properties/border-top-right-radius/collect_features.js +57 -0
  57. package/lib/properties/box-shadow/collect_features.js +92 -0
  58. package/lib/properties/box-sizing/collect_features.js +39 -0
  59. package/lib/properties/caption-side/collect_features.js +38 -0
  60. package/lib/properties/clear/collect_features.js +38 -0
  61. package/lib/properties/clip-path/collect_features.js +65 -0
  62. package/lib/properties/collect_features.js +452 -0
  63. package/lib/properties/color-scheme/collect_features.js +52 -0
  64. package/lib/properties/property_name_set.js +16 -0
  65. package/lib/properties/transition/collect_features.js +33 -0
  66. package/lib/properties/transition-property/collect_features.js +38 -0
  67. package/lib/rule.js +125 -0
  68. package/lib/selectors/__attributes/collect_features.js +44 -0
  69. package/lib/selectors/__classes/collect_features.js +23 -0
  70. package/lib/selectors/__combinators/collect_features.js +91 -0
  71. package/lib/selectors/__ids/collect_features.js +23 -0
  72. package/lib/selectors/__pseudos/collect_features.js +228 -0
  73. package/lib/selectors/__pseudos/pseudo_selector_name_set.js +18 -0
  74. package/lib/selectors/__tags/collect_features.js +48 -0
  75. package/lib/selectors/__universal/collect_features.js +37 -0
  76. package/lib/selectors/active/non_a_elements/collect_features.js +38 -0
  77. package/lib/selectors/after/animation_and_transition_support/collect_features.js +43 -0
  78. package/lib/selectors/backdrop/dialog/collect_features.js +38 -0
  79. package/lib/selectors/before/animation_and_transition_support/collect_features.js +43 -0
  80. package/lib/selectors/collect_features.js +120 -0
  81. package/lib/selectors/cue/selector_argument/collect_features.js +26 -0
  82. package/lib/selectors/hostfunction/collect_features.js +26 -0
  83. package/lib/selectors/hover/collect_features.js +61 -0
  84. package/lib/selectors/invalid/collect_features.js +39 -0
  85. package/lib/selectors/marker/animation_and_transition_support/collect_features.js +43 -0
  86. package/lib/selectors/not/selector_list/collect_features.js +31 -0
  87. package/lib/selectors/nth-child/of_syntax/collect_features.js +32 -0
  88. package/lib/selectors/nth-last-child/of_syntax/collect_features.js +32 -0
  89. package/lib/selectors/valid/collect_features.js +39 -0
  90. package/lib/types/__function/collect_features.js +187 -0
  91. package/lib/types/attr/collect_features.js +69 -0
  92. package/lib/types/attr/type_unit_name_map.js +8 -0
  93. package/lib/types/calc/collect_features.js +70 -0
  94. package/lib/types/collect_features.js +139 -0
  95. package/lib/types/color/__alpha_parameter/collect_features.js +37 -0
  96. package/lib/types/color/__float_values/collect_features.js +44 -0
  97. package/lib/types/color/__space_separated_parameters/collect_features.js +37 -0
  98. package/lib/types/color/rgb_hexadecimal_notation/collect_features.js +42 -0
  99. package/lib/types/easing-function/steps/jump/collect_features.js +37 -0
  100. package/lib/types/function_name_map.js +8 -0
  101. package/lib/types/image/gradient/__linear-gradient/collect_features.js +77 -0
  102. package/lib/types/image/gradient/__linear-gradient/doubleposition/collect_features.js +43 -0
  103. package/lib/types/image/gradient/__linear-gradient/interpolation_hints/collect_features.js +42 -0
  104. package/lib/types/image/gradient/__linear-gradient/to/collect_features.js +39 -0
  105. package/lib/types/image/gradient/__linear-gradient/unitless_0_angle/collect_features.js +40 -0
  106. package/lib/types/image/gradient/__radial-gradient/at/collect_features.js +44 -0
  107. package/lib/types/image/gradient/__radial-gradient/collect_features.js +68 -0
  108. package/lib/types/image/gradient/__radial-gradient/doubleposition/collect_features.js +47 -0
  109. package/lib/types/image/gradient/__radial-gradient/interpolation_hints/collect_features.js +42 -0
  110. package/lib/types/image/gradient/conic-gradient/collect_features.js +48 -0
  111. package/lib/types/image/gradient/conic-gradient/doubleposition/collect_features.js +43 -0
  112. package/lib/types/number/scientific_notation/collect_features.js +31 -0
  113. package/lib/types/unit_name_map.js +8 -0
  114. package/lib/types/value_name_map.js +8 -0
  115. package/lib/types.js +5 -0
  116. package/package.json +75 -0
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.collectFeatures = collectFeatures;
7
+
8
+ var _postcssMediaQueryParser = _interopRequireDefault(require("postcss-media-query-parser"));
9
+
10
+ var _postcssValueParser = _interopRequireWildcard(require("postcss-value-parser"));
11
+
12
+ var _media_feature_name_map = require("./media_feature_name_map");
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
+
18
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
+
20
+ const RANGE_OPERATOR_SET = new Set(['>=', '<=', '>', '<', '=']);
21
+ /* https://github.com/stylelint/stylelint/blob/f48c1d1518d6429c7516ae73f3d81e452f57287a/lib/utils/isRangeContextMediaFeature.js */
22
+
23
+ function isRangeContextMediaFeature(mediaFeature) {
24
+ return mediaFeature.includes('=') || mediaFeature.includes('<') || mediaFeature.includes('>');
25
+ }
26
+
27
+ async function collectFeatures({
28
+ ignoreFeatures,
29
+ node
30
+ }) {
31
+ const promises = [];
32
+ const mediaRoot = (0, _postcssMediaQueryParser.default)(node.params);
33
+ mediaRoot.walk('media-feature', mediaFeatureNode => {
34
+ const parent = mediaFeatureNode.parent;
35
+ const mediaFeatureRangeContext = isRangeContextMediaFeature((parent === null || parent === void 0 ? void 0 : parent.value) ?? '');
36
+ let mediaFeature = null;
37
+
38
+ if (mediaFeatureRangeContext) {
39
+ const valueRoot = (0, _postcssValueParser.default)(mediaFeatureNode.value);
40
+
41
+ for (const node of valueRoot.nodes) {
42
+ if (node.type !== 'word' || RANGE_OPERATOR_SET.has(node.value) || (0, _postcssValueParser.unit)(node.value) !== false) {
43
+ continue;
44
+ }
45
+
46
+ mediaFeature = {
47
+ name: node.value,
48
+ sourceIndex: mediaFeatureNode.sourceIndex + node.sourceIndex
49
+ };
50
+ }
51
+ } else {
52
+ mediaFeature = {
53
+ name: mediaFeatureNode.value,
54
+ sourceIndex: mediaFeatureNode.sourceIndex
55
+ };
56
+ }
57
+
58
+ if (mediaFeature == null) {
59
+ return;
60
+ }
61
+
62
+ const [vendorPrefix] = /^-(webkit|moz|ms|o)-/.exec(mediaFeature.name) ?? [];
63
+ const offset = `@${node.name}${node.raws.afterName ?? ''}`.length;
64
+
65
+ if (mediaFeatureRangeContext) {
66
+ const index = offset + mediaFeatureNode.sourceIndex;
67
+ const endIndex = index + mediaFeatureNode.value.length;
68
+ promises.push(Promise.resolve([{
69
+ endIndex,
70
+ id: `at-rules.media.range_syntax`,
71
+ index,
72
+ name: `Range syntax for media queries`,
73
+ node
74
+ }]));
75
+ }
76
+
77
+ const featureId = _media_feature_name_map.mediaFeatureNameMap.get(mediaFeature.name);
78
+
79
+ if (featureId != null) {
80
+ const index = offset + mediaFeature.sourceIndex;
81
+ const endIndex = index + mediaFeature.name.length;
82
+ promises.push(Promise.resolve([{
83
+ endIndex,
84
+ id: featureId,
85
+ index,
86
+ name: `"${mediaFeature.name}" media feature`,
87
+ node
88
+ }]));
89
+ } else if (vendorPrefix != null) {
90
+ const mediaFeatureName = mediaFeature.name.replace(vendorPrefix, '');
91
+
92
+ const featureId = _media_feature_name_map.mediaFeatureNameMap.get(mediaFeature.name);
93
+
94
+ if (featureId != null) {
95
+ const index = offset + mediaFeature.sourceIndex;
96
+ const endIndex = index + mediaFeature.name.length;
97
+ promises.push(Promise.resolve([{
98
+ endIndex,
99
+ id: featureId,
100
+ index,
101
+ name: `"${mediaFeatureName}" media feature`,
102
+ node,
103
+ prefix: vendorPrefix
104
+ }]));
105
+ }
106
+ }
107
+ });
108
+ promises.push(Promise.resolve().then(() => _interopRequireWildcard(require("../../collect_features"))).then(({
109
+ collectFeatures
110
+ }) => {
111
+ return collectFeatures({
112
+ container: node,
113
+ ignoreFeatures
114
+ });
115
+ }));
116
+ const features = (await Promise.all(promises)).flat();
117
+ return features;
118
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.mediaFeatureNameMap = void 0;
7
+ const mediaFeatureNameMap = new Map([['any-hover', 'at-rules.media.any-hover'], ['any-pointer', 'at-rules.media.any-pointer'], ['aspect-ratio', 'at-rules.media.aspect-ratio'], ['min-aspect-ratio', 'at-rules.media.aspect-ratio'], ['max-aspect-ratio', 'at-rules.media.aspect-ratio'], ['color', 'at-rules.media.color'], ['min-color', 'at-rules.media.color'], ['max-color', 'at-rules.media.color'], ['color-gamut', 'at-rules.media.color-gamut'], ['color-index', 'at-rules.media.color-index'], ['min-color-index', 'at-rules.media.color-index'], ['max-color-index', 'at-rules.media.color-index'], ['device-aspect-ratio', 'at-rules.media.device-aspect-ratio'], ['min-device-aspect-ratio', 'at-rules.media.device-aspect-ratio'], ['max-device-aspect-ratio', 'at-rules.media.device-aspect-ratio'], ['device-height', 'at-rules.media.device-height'], ['min-device-height', 'at-rules.media.device-height'], ['max-device-height', 'at-rules.media.device-height'], ['device-width', 'at-rules.media.device-width'], ['min-device-width', 'at-rules.media.device-width'], ['max-device-width', 'at-rules.media.device-width'], ['display-mode', 'at-rules.media.display-mode'], ['dynamic-range', 'at-rules.media.dynamic-range'], ['forced-colors', 'at-rules.media.forced-colors'], ['grid', 'at-rules.media.grid'], ['height', 'at-rules.media.height'], ['min-height', 'at-rules.media.height'], ['max-height', 'at-rules.media.height'], ['hover', 'at-rules.media.hover'], ['inverted-colors', 'at-rules.media.inverted-colors'], ['monochrome', 'at-rules.media.monochrome'], ['orientation', 'at-rules.media.orientation'], ['overflow-block', 'at-rules.media.overflow-block'], ['overflow-inline', 'at-rules.media.overflow-inline'], ['pointer', 'at-rules.media.pointer'], ['prefers-color-scheme', 'at-rules.media.prefers-color-scheme'], ['prefers-contrast', 'at-rules.media.prefers-contrast'], ['prefers-reduced-data', 'at-rules.media.prefers-reduced-data'], ['prefers-reduced-motion', 'at-rules.media.prefers-reduced-motion'], ['resolution', 'at-rules.media.resolution'], ['min-resolution', 'at-rules.media.resolution'], ['max-resolution', 'at-rules.media.resolution'], ['scripting', 'at-rules.media.scripting'], ['update', 'at-rules.media.update'], ['video-dynamic-range', 'at-rules.media.video-dynamic-range'], ['width', 'at-rules.media.width'], ['min-width', 'at-rules.media.width'], ['max-width', 'at-rules.media.width']]);
8
+ exports.mediaFeatureNameMap = mediaFeatureNameMap;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.collectFeatures = collectFeatures;
7
+
8
+ var _postcssValueParser = _interopRequireDefault(require("postcss-value-parser"));
9
+
10
+ var _descriptor_name_set = require("./descriptor_name_set");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ async function collectFeatures({
19
+ ignoreFeatures,
20
+ node
21
+ }) {
22
+ const promises = [];
23
+ node.walkDecls(delc => {
24
+ const [vendorPrefix] = /^-(webkit|moz|ms|o)-/.exec(delc.prop) ?? [];
25
+
26
+ if (_descriptor_name_set.descriptorNameSet.has(delc.prop)) {
27
+ promises.push(Promise.resolve([{
28
+ endIndex: delc.prop.length,
29
+ id: `at-rules.page.${delc.prop}`,
30
+ index: 0,
31
+ name: `"${delc.prop}" descriptor of the @page`,
32
+ node: delc
33
+ }]));
34
+ } else if (vendorPrefix != null) {
35
+ const name = delc.prop.replace(vendorPrefix, '');
36
+
37
+ if (_descriptor_name_set.descriptorNameSet.has(name)) {
38
+ promises.push(Promise.resolve([{
39
+ endIndex: delc.prop.length,
40
+ id: `at-rules.page.${name}`,
41
+ index: 0,
42
+ name: `"${name}" descriptor of the @page`,
43
+ node: delc,
44
+ prefix: vendorPrefix
45
+ }]));
46
+ }
47
+ }
48
+
49
+ const valueRoot = (0, _postcssValueParser.default)(delc.value);
50
+
51
+ if (delc.prop === 'size') {
52
+ promises.push(Promise.resolve().then(() => _interopRequireWildcard(require("./size/collect_features"))).then(({
53
+ collectFeatures
54
+ }) => {
55
+ return collectFeatures({
56
+ nodes: valueRoot.nodes,
57
+ parent: delc
58
+ });
59
+ }));
60
+ }
61
+
62
+ promises.push(Promise.resolve().then(() => _interopRequireWildcard(require("../../properties/collect_features"))).then(({
63
+ collectFeatures
64
+ }) => {
65
+ return collectFeatures({
66
+ ignoreFeatures,
67
+ node: delc,
68
+ valueRoot
69
+ });
70
+ }));
71
+ promises.push(Promise.resolve().then(() => _interopRequireWildcard(require("../../types/collect_features"))).then(({
72
+ collectFeatures
73
+ }) => {
74
+ return collectFeatures({
75
+ nodes: valueRoot.nodes,
76
+ parent: delc
77
+ });
78
+ }));
79
+ });
80
+ const features = (await Promise.all(promises)).flat();
81
+ return features;
82
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.descriptorNameSet = void 0;
7
+
8
+ var _browserCompatData = _interopRequireDefault(require("@mdn/browser-compat-data"));
9
+
10
+ var _dotProp = _interopRequireDefault(require("dot-prop"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const IGNORE_KEYS = new Set([]);
15
+ const descriptorNameSet = new Set(Array.from(Object.keys(_dotProp.default.get(_browserCompatData.default.css, 'at-rules.page') ?? {})).filter(k => !IGNORE_KEYS.has(k)));
16
+ exports.descriptorNameSet = descriptorNameSet;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.collectFeatures = collectFeatures;
7
+
8
+ async function collectFeatures({
9
+ nodes,
10
+ parent
11
+ }) {
12
+ var _parent$raws$between, _nodes$;
13
+
14
+ const features = [];
15
+ const prop = parent.prop.replace(/^-(webkit|moz|ms|o)-/, '');
16
+
17
+ if (prop !== 'size') {
18
+ return [];
19
+ }
20
+
21
+ const offset = parent.prop.length + (((_parent$raws$between = parent.raws.between) === null || _parent$raws$between === void 0 ? void 0 : _parent$raws$between.length) ?? 0);
22
+
23
+ if (nodes.length === 1 && ((_nodes$ = nodes[0]) === null || _nodes$ === void 0 ? void 0 : _nodes$.type) === 'word') {
24
+ const index = offset + nodes[0].sourceIndex;
25
+ const endIndex = offset + nodes[0].sourceEndIndex;
26
+
27
+ switch (nodes[0].value.toLowerCase()) {
28
+ case 'jis-b4':
29
+ {
30
+ features.push({
31
+ endIndex,
32
+ id: `at-rules.page.size.jis-b4`,
33
+ index,
34
+ name: `"JIS-B4" size`,
35
+ node: parent
36
+ });
37
+ break;
38
+ }
39
+
40
+ case 'jis-b5':
41
+ {
42
+ features.push({
43
+ endIndex,
44
+ id: `at-rules.page.size.jis-b5`,
45
+ index,
46
+ name: `"JIS-B5" size`,
47
+ node: parent
48
+ });
49
+ break;
50
+ }
51
+ }
52
+ }
53
+
54
+ return features;
55
+ }
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.collectFeatures = collectFeatures;
7
+
8
+ var _postcssValueParser = _interopRequireDefault(require("postcss-value-parser"));
9
+
10
+ var _descriptor_name_set = require("./descriptor_name_set");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ async function collectFeatures({
19
+ node
20
+ }) {
21
+ const promises = [];
22
+ node.walkDecls(delc => {
23
+ const [vendorPrefix] = /^-(webkit|moz|ms|o)-/.exec(delc.prop) ?? [];
24
+
25
+ if (_descriptor_name_set.descriptorNameSet.has(delc.prop)) {
26
+ promises.push(Promise.resolve([{
27
+ endIndex: delc.prop.length,
28
+ id: `at-rules.property.${delc.prop}`,
29
+ index: 0,
30
+ name: `"${delc.prop}" descriptor of the @property`,
31
+ node: delc
32
+ }]));
33
+ } else if (vendorPrefix != null) {
34
+ const name = delc.prop.replace(vendorPrefix, '');
35
+
36
+ if (_descriptor_name_set.descriptorNameSet.has(name)) {
37
+ promises.push(Promise.resolve([{
38
+ endIndex: delc.prop.length,
39
+ id: `at-rules.property.${name}`,
40
+ index: 0,
41
+ name: `"${name}" descriptor of the @property`,
42
+ node: delc,
43
+ prefix: vendorPrefix
44
+ }]));
45
+ }
46
+ }
47
+
48
+ const valueRoot = (0, _postcssValueParser.default)(delc.value);
49
+ promises.push(Promise.resolve().then(() => _interopRequireWildcard(require("../../types/collect_features"))).then(({
50
+ collectFeatures
51
+ }) => {
52
+ return collectFeatures({
53
+ nodes: valueRoot.nodes,
54
+ parent: delc
55
+ });
56
+ }));
57
+ });
58
+ const features = (await Promise.all(promises)).flat();
59
+ return features;
60
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.descriptorNameSet = void 0;
7
+
8
+ var _browserCompatData = _interopRequireDefault(require("@mdn/browser-compat-data"));
9
+
10
+ var _dotProp = _interopRequireDefault(require("dot-prop"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const IGNORE_KEYS = new Set([]);
15
+ const descriptorNameSet = new Set(Array.from(Object.keys(_dotProp.default.get(_browserCompatData.default.css, 'at-rules.property') ?? {})).filter(k => !IGNORE_KEYS.has(k)));
16
+ exports.descriptorNameSet = descriptorNameSet;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.collectFeatures = collectFeatures;
7
+
8
+ var _postcssValueParser = _interopRequireDefault(require("postcss-value-parser"));
9
+
10
+ var _descriptor_name_set = require("./descriptor_name_set");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ async function collectFeatures({
19
+ node
20
+ }) {
21
+ const promises = [];
22
+ node.walkDecls(delc => {
23
+ const [vendorPrefix] = /^-(webkit|moz|ms|o)-/.exec(delc.prop) ?? [];
24
+
25
+ if (_descriptor_name_set.descriptorNameSet.has(delc.prop)) {
26
+ promises.push(Promise.resolve([{
27
+ endIndex: delc.prop.length,
28
+ id: `at-rules.scroll-timeline.${delc.prop}`,
29
+ index: 0,
30
+ name: `"${delc.prop}" descriptor of the @scroll-timeline`,
31
+ node: delc
32
+ }]));
33
+ } else if (vendorPrefix != null) {
34
+ const name = delc.prop.replace(vendorPrefix, '');
35
+
36
+ if (_descriptor_name_set.descriptorNameSet.has(name)) {
37
+ promises.push(Promise.resolve([{
38
+ endIndex: delc.prop.length,
39
+ id: `at-rules.scroll-timeline.${name}`,
40
+ index: 0,
41
+ name: `"${name}" descriptor of the @scroll-timeline`,
42
+ node: delc,
43
+ prefix: vendorPrefix
44
+ }]));
45
+ }
46
+ }
47
+
48
+ const valueRoot = (0, _postcssValueParser.default)(delc.value);
49
+ promises.push(Promise.resolve().then(() => _interopRequireWildcard(require("../../types/collect_features"))).then(({
50
+ collectFeatures
51
+ }) => {
52
+ return collectFeatures({
53
+ nodes: valueRoot.nodes,
54
+ parent: delc
55
+ });
56
+ }));
57
+ });
58
+ const features = (await Promise.all(promises)).flat();
59
+ return features;
60
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.descriptorNameSet = void 0;
7
+
8
+ var _browserCompatData = _interopRequireDefault(require("@mdn/browser-compat-data"));
9
+
10
+ var _dotProp = _interopRequireDefault(require("dot-prop"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const IGNORE_KEYS = new Set([]);
15
+ const descriptorNameSet = new Set(Array.from(Object.keys(_dotProp.default.get(_browserCompatData.default.css, 'at-rules.scroll-timeline') ?? {})).filter(k => !IGNORE_KEYS.has(k)));
16
+ exports.descriptorNameSet = descriptorNameSet;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.collectFeatures = collectFeatures;
7
+
8
+ var _postcssValueParser = _interopRequireDefault(require("postcss-value-parser"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
+
14
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
+
16
+ async function collectFeatures({
17
+ container,
18
+ ignoreFeatures
19
+ }) {
20
+ const promises = [];
21
+ container.each(node => {
22
+ if (node.type === 'atrule') {
23
+ promises.push(Promise.resolve().then(() => _interopRequireWildcard(require("./at-rules/collect_features"))).then(({
24
+ collectFeatures
25
+ }) => collectFeatures({
26
+ ignoreFeatures,
27
+ node
28
+ })).then(features => {
29
+ return features.filter(f => !ignoreFeatures.has(f.id));
30
+ }));
31
+ }
32
+
33
+ if (node.type === 'rule') {
34
+ promises.push(Promise.resolve().then(() => _interopRequireWildcard(require("./selectors/collect_features"))).then(({
35
+ collectFeatures
36
+ }) => collectFeatures({
37
+ ignoreFeatures,
38
+ node
39
+ })).then(features => {
40
+ return features.filter(f => !ignoreFeatures.has(f.id));
41
+ }));
42
+ }
43
+
44
+ if (node.type === 'decl') {
45
+ const valueRoot = (0, _postcssValueParser.default)(node.value);
46
+ promises.push(Promise.resolve().then(() => _interopRequireWildcard(require("./properties/collect_features"))).then(({
47
+ collectFeatures
48
+ }) => collectFeatures({
49
+ ignoreFeatures,
50
+ node,
51
+ valueRoot
52
+ })).then(features => {
53
+ return features.filter(f => !ignoreFeatures.has(f.id));
54
+ }));
55
+ promises.push(Promise.resolve().then(() => _interopRequireWildcard(require("./types/collect_features"))).then(({
56
+ collectFeatures
57
+ }) => {
58
+ return collectFeatures({
59
+ nodes: valueRoot.nodes,
60
+ parent: node
61
+ });
62
+ }).then(features => {
63
+ return features.filter(f => !ignoreFeatures.has(f.id));
64
+ }));
65
+ }
66
+ });
67
+ const features = (await Promise.all(promises)).flat();
68
+ return features;
69
+ }
package/lib/index.js ADDED
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ var _rule = require("./rule");
4
+
5
+ module.exports = _rule.plugin;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isSupported = isSupported;
7
+
8
+ var _semver = _interopRequireDefault(require("semver"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ function isSupported(supportBlock, target, options) {
13
+ const supportList = [supportBlock[target.target.mdn]].flat().filter(v => v != null);
14
+
15
+ for (const s of supportList) {
16
+ if (s.alternative_name != null) {
17
+ // TODO
18
+ continue;
19
+ }
20
+
21
+ if (Array.isArray(s.flags) && options.allow.flagged !== true) {
22
+ continue;
23
+ }
24
+
25
+ if (s.partial_implementation === true && options.allow.partialImplementation !== true) {
26
+ continue;
27
+ }
28
+
29
+ if (s.prefix != null && options.allow.prefix !== true) {
30
+ continue;
31
+ }
32
+
33
+ if (s.version_added === true) {
34
+ return true;
35
+ }
36
+
37
+ if (s.version_added === false) {
38
+ return false;
39
+ }
40
+
41
+ if (s.version_added == null) {
42
+ return false;
43
+ }
44
+
45
+ if (s.version_added.startsWith('≤')) {
46
+ return true;
47
+ }
48
+
49
+ const addedSemver = _semver.default.minVersion(s.version_added);
50
+
51
+ const targetSemver = _semver.default.minVersion(`${target.version}`);
52
+
53
+ if (addedSemver == null || targetSemver == null) {
54
+ continue;
55
+ }
56
+
57
+ if (_semver.default.lte(addedSemver, targetSemver)) {
58
+ if (typeof s.version_removed !== 'string') {
59
+ return true;
60
+ }
61
+
62
+ const removedSemver = _semver.default.minVersion(s.version_removed);
63
+
64
+ if (removedSemver == null) {
65
+ return true;
66
+ }
67
+
68
+ if (_semver.default.gt(removedSemver, targetSemver)) {
69
+ return true;
70
+ }
71
+ }
72
+ }
73
+
74
+ return false;
75
+ }
package/lib/options.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ruleOptionsSchema = void 0;
7
+
8
+ var _zod = require("zod");
9
+
10
+ const ruleOptionsSchema = _zod.z.object({
11
+ allow: _zod.z.object({
12
+ features: _zod.z.array(_zod.z.string()).default(() => []),
13
+ flagged: _zod.z.boolean().default(false),
14
+ partialImplementation: _zod.z.boolean().default(false),
15
+ prefix: _zod.z.boolean().default(true)
16
+ }).default(() => ({})),
17
+ browserslist: _zod.z.union([_zod.z.string(), _zod.z.array(_zod.z.string())]).optional()
18
+ });
19
+
20
+ exports.ruleOptionsSchema = ruleOptionsSchema;