Skip to content
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

Mirroring script: Edge mirrors from both IE AND Chrome at the same time #6582

Merged
merged 65 commits into from
May 18, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
a52b34f
Mirroring script: Edge mirrors from both IE AND Chrome at the same time
queengooborg Aug 27, 2020
d7506ca
Update scripts/mirror.js
queengooborg Aug 28, 2020
107de7a
Check if IE data exists
queengooborg Aug 28, 2020
634f0da
Initialize newData as copy of originalData
queengooborg Aug 28, 2020
b039956
Rename comp to compData
queengooborg Aug 28, 2020
3c8be75
Check if IE data exists in notes
queengooborg Aug 28, 2020
878ab38
Remove redundant if clause
queengooborg Aug 28, 2020
ee436aa
De-special case Edge mirroring
queengooborg Aug 28, 2020
3a498c1
Edge is "true" if Chrome is "true"
queengooborg Aug 28, 2020
15416b8
Update scripts/mirror.js
queengooborg Aug 28, 2020
a0bbcbc
Set Edge's source as "chrome"
queengooborg Aug 28, 2020
d6a5b11
Add warning if Edge has specified --source
queengooborg Aug 31, 2020
ebc103b
Merge branch 'master' into scripts/mirroring
queengooborg Sep 2, 2020
fe28c7c
Fix script issues
queengooborg Sep 2, 2020
a529558
Add negative lookahead to prevent changing the string "Chrome OS"
queengooborg Sep 25, 2020
6fc1d6c
Fix negative lookahead
queengooborg Sep 25, 2020
7cd6001
Fix mirroring comparison for IE
queengooborg Oct 8, 2020
347a274
Merge branch 'master' into scripts/mirroring
queengooborg Feb 13, 2021
16fb38c
Merge branch 'main' into scripts/mirroring
queengooborg Jun 3, 2021
28222fa
Account for arrays in bumpEdge()
queengooborg Jun 3, 2021
277a894
Simplify chromeFalse variable
queengooborg Jun 6, 2021
925a6bc
Fix array bumping
queengooborg Jun 6, 2021
68ca2d1
Update scripts/mirror.js
queengooborg Jun 8, 2021
2494c39
Separate IE/Chrome bumping into separate functions
queengooborg Jun 8, 2021
99d076c
Fix syntax for notes combination filtering
queengooborg Jun 9, 2021
d21ae6b
Add combineStatements function
queengooborg Jun 9, 2021
ce50cfa
Hook up combineStatements to bumpEdge
queengooborg Jun 9, 2021
cb4bc99
Account for ranged values
queengooborg Jun 9, 2021
b87e41f
Simplify code for when Chrome === true
queengooborg Jun 9, 2021
e4a7cae
Restructure code
queengooborg Jun 9, 2021
9979d1b
Remove redundant clause
queengooborg Jun 9, 2021
fefa28a
Resolve statement merging
queengooborg Jun 9, 2021
7362f1e
Merge remote-tracking branch 'origin/main' into scripts/mirroring
queengooborg Jun 9, 2021
9dfe0ba
Fix notes copying
queengooborg Jun 9, 2021
2f0eb1f
De-array a single-statement array from combineStatements
queengooborg Jun 9, 2021
2e7b708
Prevent addition of "notes": null in statements
queengooborg Jun 9, 2021
59f346d
Update JSDocs
queengooborg Jun 9, 2021
9e05539
Fix syntax
queengooborg Jun 11, 2021
9282e81
Merge branch 'main' into scripts/mirroring
queengooborg Jul 27, 2021
a8aaf24
Simplify version bumping logic
queengooborg Jul 27, 2021
f983ed8
Simplify logic for choosing version bump function
queengooborg Jul 27, 2021
45ba87c
Let each individual mirroring function handle array bumping
queengooborg Jul 27, 2021
8069165
Fix data concatenation
queengooborg Jul 27, 2021
333fe2e
Ignore statements removed in Chrome before Edgium existed
queengooborg Jul 27, 2021
4e2c649
Combine statements when Edge's original data is an array
queengooborg Jul 27, 2021
096a519
Filter combined statements
queengooborg Jul 27, 2021
8a09801
Apply suggestions from code review
queengooborg Oct 9, 2021
aefbc32
Apply suggestions from review
queengooborg Oct 9, 2021
23db74a
Improve combineStatements logic
queengooborg Nov 10, 2021
d74b1ff
Make sure version_removed is version number before comparing
queengooborg Nov 13, 2021
44fe6b3
Merge branch 'main' into scripts/mirroring
queengooborg May 3, 2022
2f2f7fd
Format
queengooborg May 3, 2022
6ce7f3f
Handle empty newData array
queengooborg May 3, 2022
c0db3d1
Handle Chromium ≤79 removal better
queengooborg May 3, 2022
6c532db
Bump version_added on added-and-removed statements
queengooborg May 3, 2022
0b755fd
Allow specifying a source for Edge again
queengooborg May 3, 2022
4111697
Add missing break;
queengooborg May 3, 2022
5bf475b
Merge branch 'main' into scripts/mirroring
queengooborg May 3, 2022
6045cd3
Improve source selection code
queengooborg May 3, 2022
38dc64b
Ensure sourceData.version_added is string before performing comparison
queengooborg May 3, 2022
3a0cb7b
Fix run on arrays
queengooborg May 3, 2022
5a71c04
Merge branch 'main' into scripts/mirroring
queengooborg May 4, 2022
1b35536
Merge branch 'main' into scripts/mirroring
queengooborg May 13, 2022
a564126
Merge branch 'main' into scripts/mirroring
queengooborg May 18, 2022
5ac2c81
Change default to Chrome
queengooborg May 18, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions docs/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,18 +74,18 @@ If the feature you're interested in is a JavaScript API, you can cross-reference

Many browsers within BCD can be derived from other browsers given they share the same engine, for example Opera derives from Chrome, and Firefox Android derives from Firefox. To help cut down time working on copying values between browsers, a mirroring script is provided. You can run `npm run mirror <browser> <feature_or_file> [--source=""] [--modify=""]` to automatically copy values.

The <browser> argument is the destination browser that values will be copied to. The script automatically determines what browser to copy from based upon the destination (see table below), but manual specification is possible through the `--source=""` argument.

| Destination | Default Source |
| ---------------- | ----------------- |
| Chrome Android | Chrome |
| Edge | Internet Explorer |
| Firefox Android | Firefox |
| Opera | Chrome |
| Opera Android | Chrome Android |
| Safari iOS | Safari |
| Samsung Internet | Chrome Android |
| WebView | Chrome Android |
The <browser> argument is the destination browser that values will be copied to. The script automatically determines what browser to copy from based upon the destination (see table below), but manual specification is possible through the `--source=""` argument. (Mirroring data for Edge ignores this argument.)

| Destination | Default Source |
| ---------------- | -------------------------- |
| Chrome Android | Chrome |
| Edge | Internet Explorer + Chrome |
| Firefox Android | Firefox |
| Opera | Chrome |
| Opera Android | Chrome Android |
| Safari iOS | Safari |
| Samsung Internet | Chrome Android |
| WebView | Chrome Android |

The <feature_or_filename> argument is either the identifier of the feature to update (i.e. `css.at-rules.namespace`), a filename (`javascript/operators/arithmetic.json`), or an entire folder (`api`).

Expand Down
113 changes: 51 additions & 62 deletions scripts/mirror.js
Original file line number Diff line number Diff line change
Expand Up @@ -219,71 +219,61 @@ const bumpChromeAndroid = (originalData, sourceData, source) => {
};

/**
* @param {SupportStatement} originalData
* @param {SupportStatement} sourceData
* @param {string} source
* @param {SupportStatement} comp
* @returns {SupportStatement}
*/
const bumpEdge = (originalData, sourceData, source) => {
let newData = {};

if (source == 'ie') {
if (sourceData.version_removed && sourceData.version_removed !== null) {
newData.version_added = false;
} else if (sourceData.version_added !== null) {
newData.version_added = sourceData.version_added ? '12' : null;
}
const bumpEdge = comp => {
let newData = comp['edge'];
let originalData = comp['edge'];
let ieData = comp['ie'];
let chromeData = comp['chrome'];

if (sourceData.notes) {
newData.notes = updateNotes(
sourceData.notes,
/Internet Explorer/g,
'Edge',
);
}
} else if (source == 'chrome') {
newData = originalData == undefined ? sourceData : originalData;
if (ieData.version_removed && ieData.version_removed !== null) {
newData.version_added = false;
} else if (ieData.version_added !== null) {
newData.version_added = ieData.version_added ? '12' : null;
}

let chromeFalse =
sourceData.version_added === false ||
sourceData.version_removed !== undefined;
let chromeNull = sourceData.version_added === null;
let chromeFalse =
chromeData.version_added === false ||
chromeData.version_removed !== undefined;
let chromeNull = chromeData.version_added === null;

if (originalData === undefined) {
newData.version_added = chromeFalse ? false : chromeNull ? null : '≤79';
} else {
if (!chromeFalse && !chromeNull) {
if (originalData.version_added == true) {
newData.version_added = '≤18';
} else {
if (
sourceData.version_added == true ||
Number(sourceData.version_added) <= 79
) {
if (originalData.version_added == false) {
newData.version_added = '79';
} else if (originalData.version_added == null) {
newData.version_added = '≤79';
}
} else {
newData.version_added == sourceData.version_added;
if (originalData === undefined) {
newData.version_added = chromeFalse ? false : chromeNull ? null : '≤79';
} else {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can turn this into an else if and save some indentation in the following.

if (!chromeFalse && !chromeNull) {
if (originalData.version_added == true) {
newData.version_added = '≤18';
} else {
if (
chromeData.version_added == true ||
Number(chromeData.version_added) <= 79
) {
if (originalData.version_added == false) {
newData.version_added = '79';
} else if (originalData.version_added == null) {
newData.version_added = '≤79';
}
} else {
newData.version_added == chromeData.version_added;
}
} else if (chromeFalse) {
if (originalData.version_added && !originalData.version_removed) {
newData.version_removed = '79';
}
}
} else if (chromeFalse) {
if (originalData.version_added && !originalData.version_removed) {
newData.version_removed = '79';
}
}
}

let newNotes = combineNotes(
updateNotes(sourceData.notes, /Chrome/g, 'Edge'),
originalData.notes,
);
let newNotes = combineNotes(
updateNotes(ieData.notes, /Internet Explorer/g, 'Edge'),
updateNotes(chromeData.notes, /Chrome/g, 'Edge'),
originalData.notes,
);

if (newNotes) {
newData.notes = newNotes;
}
if (newNotes) {
newData.notes = newNotes;
}

return newData;
Expand Down Expand Up @@ -512,10 +502,7 @@ const bumpVersion = (data, destination, source, originalData) => {
let newData = null;
if (data == null) {
return null;
} else if (
Array.isArray(data) &&
!(destination == 'edge' && source == 'chrome')
) {
} else if (Array.isArray(data)) {
newData = [];
for (let i = 0; i < data.length; i++) {
newData[i] = bumpVersion(data[i], destination, source, originalData);
Expand All @@ -527,9 +514,6 @@ const bumpVersion = (data, destination, source, originalData) => {
case 'chrome_android':
bumpFunction = bumpChromeAndroid;
break;
case 'edge':
bumpFunction = bumpEdge;
break;
case 'firefox_android':
bumpFunction = bumpFirefoxAndroid;
break;
Expand Down Expand Up @@ -594,7 +578,12 @@ const doSetFeature = (data, newData, rootPath, browser, source, modify) => {
}

if (doBump) {
let newValue = bumpVersion(comp[source], browser, source, comp[browser]);
let newValue = null;
if (browser == 'edge') {
newValue = bumpEdge(comp);
} else {
newValue = bumpVersion(comp[source], browser, source, comp[browser]);
}
if (newValue !== null) {
newData[rootPath].__compat.support[browser] = newValue;
}
Expand Down