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.
- package/LICENSE +21 -0
- package/README.md +91 -0
- package/lib/at-rules/at_rules_name_set.js +16 -0
- package/lib/at-rules/collect_features.js +145 -0
- package/lib/at-rules/counter-style/collect_features.js +41 -0
- package/lib/at-rules/counter-style/descriptor_name_set.js +16 -0
- package/lib/at-rules/document/collect_features.js +46 -0
- package/lib/at-rules/document/regexp/collect_features.js +30 -0
- package/lib/at-rules/font-face/__font_type/collect_features.js +79 -0
- package/lib/at-rules/font-face/collect_features.js +67 -0
- package/lib/at-rules/font-face/descriptor_name_set.js +16 -0
- package/lib/at-rules/font-feature-values/at_rules_name_set.js +16 -0
- package/lib/at-rules/font-feature-values/collect_features.js +30 -0
- package/lib/at-rules/keyframes/collect_features.js +29 -0
- package/lib/at-rules/media/collect_features.js +118 -0
- package/lib/at-rules/media/media_feature_name_map.js +8 -0
- package/lib/at-rules/page/collect_features.js +82 -0
- package/lib/at-rules/page/descriptor_name_set.js +16 -0
- package/lib/at-rules/page/size/collect_features.js +55 -0
- package/lib/at-rules/property/collect_features.js +60 -0
- package/lib/at-rules/property/descriptor_name_set.js +16 -0
- package/lib/at-rules/scroll-timeline/collect_features.js +60 -0
- package/lib/at-rules/scroll-timeline/descriptor_name_set.js +16 -0
- package/lib/collect_features.js +69 -0
- package/lib/index.js +5 -0
- package/lib/is_supported.js +75 -0
- package/lib/options.js +20 -0
- package/lib/parse_browserslist_version.js +132 -0
- package/lib/properties/-moz-orient/collect_features.js +61 -0
- package/lib/properties/-moz-user-input/collect_features.js +71 -0
- package/lib/properties/animation-direction/collect_features.js +53 -0
- package/lib/properties/animation-timing-function/collect_features.js +51 -0
- package/lib/properties/appearance/collect_features.js +76 -0
- package/lib/properties/background/background-clip/collect_features.js +59 -0
- package/lib/properties/background/background-origin/collect_features.js +59 -0
- package/lib/properties/background/background-size/collect_features.js +106 -0
- package/lib/properties/background/collect_features.js +104 -0
- package/lib/properties/background/multiple_backgrounds/collect_features.js +39 -0
- package/lib/properties/background-attachment/collect_features.js +70 -0
- package/lib/properties/background-clip/collect_features.js +55 -0
- package/lib/properties/background-image/collect_features.js +133 -0
- package/lib/properties/background-image/svg_images/collect_features.js +58 -0
- package/lib/properties/background-origin/collect_features.js +42 -0
- package/lib/properties/background-position/collect_features.js +117 -0
- package/lib/properties/background-position-x/collect_features.js +36 -0
- package/lib/properties/background-position-y/collect_features.js +36 -0
- package/lib/properties/background-repeat/collect_features.js +102 -0
- package/lib/properties/background-repeat/round_space/collect_features.js +54 -0
- package/lib/properties/background-size/collect_features.js +38 -0
- package/lib/properties/block-size/collect_features.js +77 -0
- package/lib/properties/border-bottom-left-radius/border-bottom-right-radius/collect_features.js +57 -0
- package/lib/properties/border-bottom-left-radius/collect_features.js +57 -0
- package/lib/properties/border-bottom-right-radius/collect_features.js +57 -0
- package/lib/properties/border-radius/collect_features.js +61 -0
- package/lib/properties/border-top-left-radius/collect_features.js +57 -0
- package/lib/properties/border-top-right-radius/collect_features.js +57 -0
- package/lib/properties/box-shadow/collect_features.js +92 -0
- package/lib/properties/box-sizing/collect_features.js +39 -0
- package/lib/properties/caption-side/collect_features.js +38 -0
- package/lib/properties/clear/collect_features.js +38 -0
- package/lib/properties/clip-path/collect_features.js +65 -0
- package/lib/properties/collect_features.js +452 -0
- package/lib/properties/color-scheme/collect_features.js +52 -0
- package/lib/properties/property_name_set.js +16 -0
- package/lib/properties/transition/collect_features.js +33 -0
- package/lib/properties/transition-property/collect_features.js +38 -0
- package/lib/rule.js +125 -0
- package/lib/selectors/__attributes/collect_features.js +44 -0
- package/lib/selectors/__classes/collect_features.js +23 -0
- package/lib/selectors/__combinators/collect_features.js +91 -0
- package/lib/selectors/__ids/collect_features.js +23 -0
- package/lib/selectors/__pseudos/collect_features.js +228 -0
- package/lib/selectors/__pseudos/pseudo_selector_name_set.js +18 -0
- package/lib/selectors/__tags/collect_features.js +48 -0
- package/lib/selectors/__universal/collect_features.js +37 -0
- package/lib/selectors/active/non_a_elements/collect_features.js +38 -0
- package/lib/selectors/after/animation_and_transition_support/collect_features.js +43 -0
- package/lib/selectors/backdrop/dialog/collect_features.js +38 -0
- package/lib/selectors/before/animation_and_transition_support/collect_features.js +43 -0
- package/lib/selectors/collect_features.js +120 -0
- package/lib/selectors/cue/selector_argument/collect_features.js +26 -0
- package/lib/selectors/hostfunction/collect_features.js +26 -0
- package/lib/selectors/hover/collect_features.js +61 -0
- package/lib/selectors/invalid/collect_features.js +39 -0
- package/lib/selectors/marker/animation_and_transition_support/collect_features.js +43 -0
- package/lib/selectors/not/selector_list/collect_features.js +31 -0
- package/lib/selectors/nth-child/of_syntax/collect_features.js +32 -0
- package/lib/selectors/nth-last-child/of_syntax/collect_features.js +32 -0
- package/lib/selectors/valid/collect_features.js +39 -0
- package/lib/types/__function/collect_features.js +187 -0
- package/lib/types/attr/collect_features.js +69 -0
- package/lib/types/attr/type_unit_name_map.js +8 -0
- package/lib/types/calc/collect_features.js +70 -0
- package/lib/types/collect_features.js +139 -0
- package/lib/types/color/__alpha_parameter/collect_features.js +37 -0
- package/lib/types/color/__float_values/collect_features.js +44 -0
- package/lib/types/color/__space_separated_parameters/collect_features.js +37 -0
- package/lib/types/color/rgb_hexadecimal_notation/collect_features.js +42 -0
- package/lib/types/easing-function/steps/jump/collect_features.js +37 -0
- package/lib/types/function_name_map.js +8 -0
- package/lib/types/image/gradient/__linear-gradient/collect_features.js +77 -0
- package/lib/types/image/gradient/__linear-gradient/doubleposition/collect_features.js +43 -0
- package/lib/types/image/gradient/__linear-gradient/interpolation_hints/collect_features.js +42 -0
- package/lib/types/image/gradient/__linear-gradient/to/collect_features.js +39 -0
- package/lib/types/image/gradient/__linear-gradient/unitless_0_angle/collect_features.js +40 -0
- package/lib/types/image/gradient/__radial-gradient/at/collect_features.js +44 -0
- package/lib/types/image/gradient/__radial-gradient/collect_features.js +68 -0
- package/lib/types/image/gradient/__radial-gradient/doubleposition/collect_features.js +47 -0
- package/lib/types/image/gradient/__radial-gradient/interpolation_hints/collect_features.js +42 -0
- package/lib/types/image/gradient/conic-gradient/collect_features.js +48 -0
- package/lib/types/image/gradient/conic-gradient/doubleposition/collect_features.js +43 -0
- package/lib/types/number/scientific_notation/collect_features.js +31 -0
- package/lib/types/unit_name_map.js +8 -0
- package/lib/types/value_name_map.js +8 -0
- package/lib/types.js +5 -0
- 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,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;
|