-
Notifications
You must be signed in to change notification settings - Fork 75
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Provide an approved method to get a status for a single BCD key #1204
Changes from all commits
53fd8ba
ca8bd79
4ddd085
a1ad8d7
032d809
92224bd
073b991
566bb80
63e00ad
7d496a4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -34,7 +34,7 @@ export const BASELINE_LOW_TO_HIGH_DURATION = Temporal.Duration.from({ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
type BaselineStatus = "low" | "high" | false; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
type BaselineDate = string | null; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
interface SupportStatus { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
interface SupportDetails { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
compatKey?: string; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
baseline: BaselineStatus; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
baseline_low_date: BaselineDate; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -44,6 +44,41 @@ interface SupportStatus { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
toJSON: () => string; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// TODO: Use a type from `web-features` directly, instead of approximating it here | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
interface SupportStatus { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
baseline: "low" | "high" | false; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
baseline_low_date: string; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
baseline_high_date?: string; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
support: Record<string, string>; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Calculate a Baseline status for specific browser compat data keys within a | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* web-features feature, in the style of a web-feature's `status` key. Use this | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* method to calculate fine-grained support statuses. This is the only method | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* approved to compute Baseline statuses not otherwise published in the | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* `web-features` package. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* For example, suppose you want to show a Baseline status for a specific method | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* in a feature, which might've been supported earlier or later than the broader | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* feature overall. Then you'd call `getStatus('example-feature', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* 'api.ExampleManager.doExample')`. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
export function getStatus( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
featureId: string, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
compatKey: string, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
compat: Compat = defaultCompat, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
): SupportStatus { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// TODO: actually check that featureId is a valid feature | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// TODO: actually check that compatKey is tagged as featureId in BCD _or_ listed in web-features | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+72
to
+73
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Are you planning on implementing those TODOs in this PR? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I am not. This requires some non-trivial changes to the way the repo and dependencies are set up, which would overwhelm the policy and documentation changes going on here. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return JSON.parse( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
computeBaseline( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ compatKeys: [compatKey], checkAncestors: true }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you add a test that shows the difference between There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is already tested with web-features/packages/compute-baseline/src/baseline/index.test.ts Lines 78 to 104 in cc5cccb
getStatus does the same?
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah, existing tests are OK. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
compat, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
).toJSON(), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Given a set of compat keys, compute the aggregate Baseline support ("high", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* "low" or false, dates, and releases) for those keys. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -54,7 +89,7 @@ export function computeBaseline( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
checkAncestors?: boolean; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
compat: Compat = defaultCompat, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
): SupportStatus { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
): SupportDetails { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const { compatKeys } = featureSelector; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const keys = featureSelector.checkAncestors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
? compatKeys.flatMap((key) => withAncestors(key, compat)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -88,7 +123,7 @@ export function computeBaseline( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Compute the Baseline support ("high", "low" or false, dates, and releases) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* for a single compat key. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
function calculate(compatKey: string, compat: Compat): SupportStatus { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
function calculate(compatKey: string, compat: Compat): SupportDetails { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const f = feature(compatKey); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const s = support(f, browsers(compat)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const keystoneDate = findKeystoneDate([...s.values()]); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -227,7 +262,7 @@ function findKeystoneDate( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
return latestDate; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
function jsonify(status: SupportStatus): string { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
function jsonify(status: SupportDetails): string { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const { baseline_low_date, baseline_high_date } = status; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const support: Record<string, string> = {}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In order for this to be accurate, we need a way to review the individual statuses. Grouping compat keys by their generated status with comments is the approach we've discussed.