Skip to content

Commit 0d40182

Browse files
ddbeckjcscottiiifoolip
authored
Add move and split redirects to the schema (#3000)
Co-authored-by: James C Scott III <[email protected]> Co-authored-by: Philip Jägenstedt <[email protected]>
1 parent 1bf099a commit 0d40182

27 files changed

+420
-113
lines changed

assertions.test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import assert from "node:assert/strict";
2+
import { assertValidFeatureReference } from "./assertions";
3+
4+
describe("assertValidReference()", function () {
5+
it("throws if target ID is a move", function () {
6+
assert.throws(() => {
7+
assertValidFeatureReference("a", "some-moving-feature", {
8+
"some-moving-feature": { kind: "moved" },
9+
});
10+
});
11+
});
12+
13+
it("throws if target ID is a split", function () {
14+
assert.throws(() => {
15+
assertValidFeatureReference("a", "some-split-feature", {
16+
"some-split-feature": { kind: "split" },
17+
});
18+
});
19+
});
20+
21+
it("throws if target ID is not defined", function () {
22+
assert.throws(() => {
23+
assertValidFeatureReference(
24+
"a",
25+
"this-is-a-completely-invalid-feature",
26+
{},
27+
);
28+
});
29+
});
30+
31+
it("does not throw if target ID is a feature", function () {
32+
assert.doesNotThrow(() => {
33+
assertValidFeatureReference("a", "dom", { dom: { kind: "feature" } });
34+
});
35+
});
36+
});

assertions.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { isOrdinaryFeatureData } from "./type-guards";
2+
import { WebFeaturesData } from "./types.quicktype";
3+
4+
/**
5+
* Assert that a reference from one feature to another is an ordinary feature
6+
* reference (i.e., it's defined and not some kind of redirect).
7+
*
8+
* @export
9+
* @param {string} sourceId The feature that is referencing another feature
10+
* @param {string} targetId The feature being referenced
11+
* @param {WebFeaturesData["features"]} features Feature data
12+
*/
13+
export function assertValidFeatureReference(
14+
sourceId: string,
15+
targetId: string,
16+
features: WebFeaturesData["features"],
17+
) {
18+
const target: unknown = features[targetId];
19+
if (target === undefined) {
20+
throw new Error(`${sourceId} references a non-existent feature`);
21+
}
22+
if (!isOrdinaryFeatureData(target)) {
23+
throw new Error(
24+
`${sourceId} references a redirect "${targetId} instead of an ordinary feature ID`,
25+
);
26+
}
27+
}
28+
29+
// TODO: assertValidSnapshotReference

features/conic-gradients.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ status:
88
compat_features:
99
- css.types.gradient.conic-gradient
1010
- css.types.gradient.conic-gradient.doubleposition
11+
- css.types.gradient.conic-gradient.single_color_stop
1112
- css.types.gradient.repeating-conic-gradient

features/conic-gradients.yml.dist

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,15 @@ compat_features:
4141
# safari: "12.1"
4242
# safari_ios: "12.2"
4343
- css.types.gradient.conic-gradient.doubleposition
44+
45+
# baseline: low
46+
# baseline_low_date: 2025-04-04
47+
# support:
48+
# chrome: "135"
49+
# chrome_android: "135"
50+
# edge: "135"
51+
# firefox: "136"
52+
# firefox_android: "136"
53+
# safari: "18.4"
54+
# safari_ios: "18.4"
55+
- css.types.gradient.conic-gradient.single_color_stop

features/gradients.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,22 @@ compat_features:
1616
- css.types.gradient.linear-gradient.interpolation_hints
1717
- css.types.gradient.linear-gradient.premultiplied_gradients
1818
- css.types.gradient.linear-gradient.to
19+
- css.types.gradient.linear-gradient.single_color_stop
1920
- css.types.gradient.linear-gradient.unitless_0_angle
2021
- css.types.gradient.repeating-linear-gradient
2122
- css.types.gradient.repeating-linear-gradient.doubleposition
2223
- css.types.gradient.repeating-linear-gradient.interpolation_hints
2324
- css.types.gradient.repeating-linear-gradient.to
25+
- css.types.gradient.repeating-linear-gradient.single_color_stop
2426
- css.types.gradient.repeating-linear-gradient.unitless_0_angle
2527
- css.types.gradient.radial-gradient
2628
- css.types.gradient.radial-gradient.at
2729
- css.types.gradient.radial-gradient.doubleposition
2830
- css.types.gradient.radial-gradient.interpolation_hints
2931
- css.types.gradient.radial-gradient.premultiplied_gradients
32+
- css.types.gradient.radial-gradient.single_color_stop
3033
- css.types.gradient.repeating-radial-gradient
3134
- css.types.gradient.repeating-radial-gradient.at
3235
- css.types.gradient.repeating-radial-gradient.doubleposition
3336
- css.types.gradient.repeating-radial-gradient.interpolation_hints
37+
- css.types.gradient.repeating-radial-gradient.single_color_stop

features/gradients.yml.dist

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,18 @@ compat_features:
145145
# safari_ios: "15"
146146
- css.types.gradient.linear-gradient.premultiplied_gradients
147147
- css.types.gradient.radial-gradient.premultiplied_gradients
148+
149+
# baseline: low
150+
# baseline_low_date: 2025-04-04
151+
# support:
152+
# chrome: "135"
153+
# chrome_android: "135"
154+
# edge: "135"
155+
# firefox: "136"
156+
# firefox_android: "136"
157+
# safari: "18.4"
158+
# safari_ios: "18.4"
159+
- css.types.gradient.linear-gradient.single_color_stop
160+
- css.types.gradient.radial-gradient.single_color_stop
161+
- css.types.gradient.repeating-linear-gradient.single_color_stop
162+
- css.types.gradient.repeating-radial-gradient.single_color_stop

features/numeric-separators.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
name: Numeric separators
2+
description: To improve readability for numeric literals, underscores (`_`) can be used as separators. For example, `1_050.95` is equivalent to `1050.95`.
3+
spec: https://tc39.es/ecma262/multipage/ecmascript-language-lexical-grammar.html#prod-NumericLiteralSeparator
4+
group: javascript
5+
compat_features:
6+
- javascript.grammar.numeric_separators
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Generated from: numeric-separators.yml
2+
# Do not edit this file by hand. Edit the source file instead!
3+
4+
status:
5+
baseline: high
6+
baseline_low_date: 2020-07-28
7+
baseline_high_date: 2023-01-28
8+
support:
9+
chrome: "75"
10+
chrome_android: "75"
11+
edge: "79"
12+
firefox: "70"
13+
firefox_android: "79"
14+
safari: "13"
15+
safari_ios: "13"
16+
compat_features:
17+
- javascript.grammar.numeric_separators

features/numeric-seperators.yml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,2 @@
1-
name: Numeric separators
2-
description: To improve readability for numeric literals, underscores (`_`) can be used as separators. For example, `1_050.95` is equivalent to `1050.95`.
3-
spec: https://tc39.es/ecma262/multipage/ecmascript-language-lexical-grammar.html#prod-NumericLiteralSeparator
4-
group: javascript
5-
compat_features:
6-
- javascript.grammar.numeric_separators
1+
kind: moved
2+
redirect_target: numeric-separators
Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,6 @@
11
# Generated from: numeric-seperators.yml
2-
# Do not edit this file by hand. Edit the source file instead!
2+
# This file intentionally left blank.
3+
# Do not edit this file.
4+
# The data for this feature has moved to numeric-separators.yml
35

4-
status:
5-
baseline: high
6-
baseline_low_date: 2020-07-28
7-
baseline_high_date: 2023-01-28
8-
support:
9-
chrome: "75"
10-
chrome_android: "75"
11-
edge: "79"
12-
firefox: "70"
13-
firefox_android: "79"
14-
safari: "13"
15-
safari_ios: "13"
16-
compat_features:
17-
- javascript.grammar.numeric_separators
6+
{}

0 commit comments

Comments
 (0)