diff --git a/.gitignore b/.gitignore index 678f4bcd8b5159..c1f10fb43b3cf5 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ coverage.lcov coverage/ types/types.d.ts .DS_Store +.cache \ No newline at end of file diff --git a/browsers/bun.json b/browsers/bun.json new file mode 100644 index 00000000000000..e7e61d65b47c1f --- /dev/null +++ b/browsers/bun.json @@ -0,0 +1,716 @@ +{ + "browsers": { + "bun": { + "name": "Bun", + "type": "server", + "accepts_flags": true, + "accepts_webextensions": false, + "releases": { + "1.0.0": { + "release_date": "2023-09-08", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.0", + "status": "retired" + }, + "1.0.1": { + "release_date": "2023-09-12", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.1", + "status": "retired" + }, + "1.0.2": { + "release_date": "2023-09-15", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.2", + "status": "retired" + }, + "1.0.3": { + "release_date": "2023-09-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.3", + "status": "retired" + }, + "1.0.4": { + "release_date": "2023-10-03", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.4", + "status": "retired" + }, + "1.0.5": { + "release_date": "2023-10-11", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.5", + "status": "retired" + }, + "1.0.6": { + "release_date": "2023-10-12", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.6", + "status": "retired" + }, + "1.0.7": { + "release_date": "2023-10-20", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.7", + "status": "retired" + }, + "1.0.8": { + "release_date": "2023-11-03", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.8", + "status": "retired" + }, + "1.0.9": { + "release_date": "2023-11-05", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.9", + "status": "retired" + }, + "1.0.10": { + "release_date": "2023-11-07", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.10", + "status": "retired" + }, + "1.0.11": { + "release_date": "2023-11-08", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.11", + "status": "retired" + }, + "1.0.12": { + "release_date": "2023-11-16", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.12", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.13": { + "release_date": "2023-11-18", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.13", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.14": { + "release_date": "2023-11-23", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.14", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.15": { + "release_date": "2023-12-02", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.15", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.16": { + "release_date": "2023-12-10", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.16", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.17": { + "release_date": "2023-12-12", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.17", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.18": { + "release_date": "2023-12-14", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.18", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.19": { + "release_date": "2023-12-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.19", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.20": { + "release_date": "2023-12-24", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.20", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.21": { + "release_date": "2024-01-02", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.21", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.22": { + "release_date": "2024-01-10", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.22", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.23": { + "release_date": "2024-01-16", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.23", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.24": { + "release_date": "2024-01-20", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.24", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.25": { + "release_date": "2024-01-21", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.25", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.26": { + "release_date": "2024-02-03", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.26", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.27": { + "release_date": "2024-02-17", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.27", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.28": { + "release_date": "2024-02-19", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.28", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.29": { + "release_date": "2024-02-23", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.29", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.30": { + "release_date": "2024-03-04", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.30", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.31": { + "release_date": "2024-03-15", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.31", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.32": { + "release_date": "2024-03-17", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.32", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.33": { + "release_date": "2024-03-18", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.33", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.34": { + "release_date": "2024-03-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.34", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.35": { + "release_date": "2024-03-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.35", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.0.36": { + "release_date": "2024-03-29", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.36", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.0": { + "release_date": "2024-04-01", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.0", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.1": { + "release_date": "2024-04-04", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.1", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.2": { + "release_date": "2024-04-06", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.2", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.3": { + "release_date": "2024-04-08", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.3", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.4": { + "release_date": "2024-04-16", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.4", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.5": { + "release_date": "2024-04-26", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.5", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.6": { + "release_date": "2024-04-28", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.6", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.7": { + "release_date": "2024-05-03", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.7", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.8": { + "release_date": "2024-05-10", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.8", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.9": { + "release_date": "2024-05-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.9", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.10": { + "release_date": "2024-05-25", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.10", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.11": { + "release_date": "2024-06-01", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.11", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.12": { + "release_date": "2024-06-01", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.12", + "status": "retired", + "engine": "WebKit", + "engine_version": "617.1.3" + }, + "1.1.13": { + "release_date": "2024-06-12", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.13", + "status": "retired", + "engine": "WebKit", + "engine_version": "619.1.13" + }, + "1.1.14": { + "release_date": "2024-06-19", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.14", + "status": "retired", + "engine": "WebKit", + "engine_version": "619.1.13" + }, + "1.1.15": { + "release_date": "2024-06-19", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.15", + "status": "retired", + "engine": "WebKit", + "engine_version": "619.1.13" + }, + "1.1.16": { + "release_date": "2024-06-23", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.16", + "status": "retired", + "engine": "WebKit", + "engine_version": "619.1.13" + }, + "1.1.17": { + "release_date": "2024-06-25", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.17", + "status": "retired", + "engine": "WebKit", + "engine_version": "619.1.13" + }, + "1.1.18": { + "release_date": "2024-07-03", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.18", + "status": "retired", + "engine": "WebKit", + "engine_version": "619.1.22" + }, + "1.1.19": { + "release_date": "2024-07-12", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.19", + "status": "retired", + "engine": "WebKit", + "engine_version": "619.1.22" + }, + "1.1.20": { + "release_date": "2024-07-13", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.20", + "status": "retired", + "engine": "WebKit", + "engine_version": "619.1.22" + }, + "1.1.21": { + "release_date": "2024-07-27", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.21", + "status": "retired", + "engine": "WebKit", + "engine_version": "619.1.22" + }, + "1.1.22": { + "release_date": "2024-08-07", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.22", + "status": "retired", + "engine": "WebKit", + "engine_version": "620.1.2" + }, + "1.1.23": { + "release_date": "2024-08-14", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.23", + "status": "retired", + "engine": "WebKit", + "engine_version": "620.1.2" + }, + "1.1.24": { + "release_date": "2024-08-14", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.24", + "status": "retired", + "engine": "WebKit", + "engine_version": "620.1.2" + }, + "1.1.25": { + "release_date": "2024-08-21", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.25", + "status": "retired", + "engine": "WebKit", + "engine_version": "620.1.2" + }, + "1.1.26": { + "release_date": "2024-08-24", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.26", + "status": "retired", + "engine": "WebKit", + "engine_version": "620.1.2" + }, + "1.1.27": { + "release_date": "2024-09-07", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.27", + "status": "retired", + "engine": "WebKit", + "engine_version": "620.1.2" + }, + "1.1.28": { + "release_date": "2024-09-18", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.28", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.1" + }, + "1.1.29": { + "release_date": "2024-09-20", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.29", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.1" + }, + "1.1.30": { + "release_date": "2024-10-08", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.30", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.3" + }, + "1.1.31": { + "release_date": "2024-10-18", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.31", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.4" + }, + "1.1.32": { + "release_date": "2024-10-21", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.32", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.4" + }, + "1.1.33": { + "release_date": "2024-10-24", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.33", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.4" + }, + "1.1.34": { + "release_date": "2024-11-02", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.34", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.5" + }, + "1.1.35": { + "release_date": "2024-11-19", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.35", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.5" + }, + "1.1.36": { + "release_date": "2024-11-19", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.36", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.5" + }, + "1.1.37": { + "release_date": "2024-11-26", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.37", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.5" + }, + "1.1.38": { + "release_date": "2024-11-29", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.38", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.5" + }, + "1.1.39": { + "release_date": "2024-12-17", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.39", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.9" + }, + "1.1.40": { + "release_date": "2024-12-18", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.40", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.9" + }, + "1.1.41": { + "release_date": "2024-12-20", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.41", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.9" + }, + "1.1.42": { + "release_date": "2024-12-21", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.42", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.9" + }, + "1.1.43": { + "release_date": "2025-01-08", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.43", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.10" + }, + "1.1.44": { + "release_date": "2025-01-17", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.44", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.11" + }, + "1.1.45": { + "release_date": "2025-01-17", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.45", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.11" + }, + "1.2.0": { + "release_date": "2025-01-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.0", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.11" + }, + "1.2.1": { + "release_date": "2025-01-27", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.1", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.11" + }, + "1.2.2": { + "release_date": "2025-02-01", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.2", + "status": "retired", + "engine": "WebKit", + "engine_version": "621.1.11" + }, + "1.2.3": { + "release_date": "2025-02-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.3", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.3" + }, + "1.2.4": { + "release_date": "2025-02-26", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.4", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.3" + }, + "1.2.5": { + "release_date": "2025-03-11", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.5", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.7" + }, + "1.2.6": { + "release_date": "2025-03-25", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.6", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.7" + }, + "1.2.7": { + "release_date": "2025-03-27", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.7", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.7" + }, + "1.2.8": { + "release_date": "2025-03-31", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.8", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.7" + }, + "1.2.9": { + "release_date": "2025-04-09", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.9", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.10" + }, + "1.2.10": { + "release_date": "2025-04-17", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.10", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.10" + }, + "1.2.11": { + "release_date": "2025-04-29", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.11", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.11" + }, + "1.2.12": { + "release_date": "2025-05-04", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.12", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.11" + }, + "1.2.13": { + "release_date": "2025-05-10", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.13", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.12" + }, + "1.2.14": { + "release_date": "2025-05-21", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.14", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.12" + }, + "1.2.15": { + "release_date": "2025-05-28", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.15", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.15" + }, + "1.2.16": { + "release_date": "2025-06-12", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.16", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.16" + }, + "1.2.17": { + "release_date": "2025-06-21", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.17", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.17" + }, + "1.2.18": { + "release_date": "2025-07-03", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.18", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.19" + }, + "1.2.19": { + "release_date": "2025-07-19", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.19", + "status": "retired", + "engine": "WebKit", + "engine_version": "622.1.19" + }, + "1.2.20": { + "release_date": "2025-08-10", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.20", + "status": "current", + "engine": "WebKit", + "engine_version": "623.1.3" + } + } + } + } +} diff --git a/scripts/update-browser-releases/bun.ts b/scripts/update-browser-releases/bun.ts new file mode 100644 index 00000000000000..f6276a33b524ef --- /dev/null +++ b/scripts/update-browser-releases/bun.ts @@ -0,0 +1,326 @@ +/* This file is a part of @mdn/browser-compat-data + * See LICENSE file for more information. */ + +import fs from 'node:fs/promises'; + +import chalk from 'chalk-template'; +import { compareVersions } from 'compare-versions'; + +import stringify from '../lib/stringify-and-order-properties.js'; + +import { + createOrUpdateBrowserEntry, + gfmNoteblock, + updateBrowserEntry, +} from './utils.js'; + +import type { CompatData } from '../../types/types.js'; + +type BunVersionInfo = { + status: 'current' | 'retired'; + release_date: string; + release_notes: string; +} & ( + | { + versions?: never; + revision?: never; + } + | { + versions: Record<(string & {}) | 'webkit', string>; + revision: string; + } +); + +interface BunVersionsResponse { + $note: string; + releases: Record; +} + +const VERSIONS_API = 'https://bun.com/versions.json'; + +const webkitVersionCache = new Map(); + +/** + * Fetches Bun version information from the versions.json endpoint. + * @returns The versions response object. + */ +const fetchVersions = async (): Promise => { + const res = await fetch(VERSIONS_API, { + headers: { + 'User-Agent': + 'MDN-Browser-Release-Update-Bot/1.0 (+https://developer.mozilla.org/)', + Accept: 'application/json', + }, + }); + if (!res.ok) { + throw new Error(`Bun versions fetch failed: HTTP ${res.status}`); + } + return (await res.json()) as BunVersionsResponse; +}; + +/** + * Fetches WebKit version from the Version.xcconfig file at a specific commit. + * @param commitHash - The WebKit commit hash. + * @returns The WebKit version in x.y.z format, or undefined if fetch fails. + */ +const fetchWebKitVersion = async ( + commitHash: string, +): Promise => { + if (webkitVersionCache.has(commitHash)) { + return webkitVersionCache.get(commitHash); + } + + try { + const url = `https://api.github.com/repos/oven-sh/WebKit/contents/Configurations/Version.xcconfig?ref=${commitHash}`; + + const headers: Record = { + 'User-Agent': + 'MDN-Browser-Release-Update-Bot/1.0 (+https://developer.mozilla.org/)', + Accept: 'application/vnd.github.v3.raw', + }; + + const githubToken = process.env.GITHUB_TOKEN || process.env.GH_TOKEN; + if (githubToken) { + headers['Authorization'] = `token ${githubToken}`; + console.log(chalk`{gray Using GitHub token for API requests}`); + } + + const res = await fetch(url, { headers }); + + if (res.status === 403 || res.status === 429) { + const retryAfter = res.headers.get('Retry-After'); + const rateLimitReset = res.headers.get('X-RateLimit-Reset'); + + let waitTime = 60; + + if (retryAfter) { + waitTime = parseInt(retryAfter, 10); + } else if (rateLimitReset) { + const resetTime = parseInt(rateLimitReset, 10) * 1000; + waitTime = Math.max(1, Math.ceil((resetTime - Date.now()) / 1000)); + } + + console.log( + chalk`{yellow Rate limited for commit ${commitHash}. Waiting ${waitTime} seconds...}`, + ); + + await new Promise((resolve) => setTimeout(resolve, waitTime * 1000)); + + const retryRes = await fetch(url, { headers }); + + if (!retryRes.ok) { + console.warn( + chalk`{yellow Warning: Failed to fetch WebKit Version.xcconfig for commit ${commitHash} after retry: HTTP ${retryRes.status}}`, + ); + return undefined; + } + + const content = await retryRes.text(); + + const majorMatch = content.match(/MAJOR_VERSION\s*=\s*(\d+)/); + const minorMatch = content.match(/MINOR_VERSION\s*=\s*(\d+)/); + const tinyMatch = content.match(/TINY_VERSION\s*=\s*(\d+)/); + + if (majorMatch && minorMatch && tinyMatch) { + const version = `${majorMatch[1]}.${minorMatch[1]}.${tinyMatch[1]}`; + webkitVersionCache.set(commitHash, version); + return version; + } + + console.warn( + chalk`{yellow Warning: Could not parse version numbers from Version.xcconfig for commit ${commitHash}}`, + ); + webkitVersionCache.set(commitHash, undefined); + return undefined; + } + + if (!res.ok) { + console.warn( + chalk`{yellow Warning: Failed to fetch WebKit Version.xcconfig for commit ${commitHash}: HTTP ${res.status}}`, + ); + return undefined; + } + + const content = await res.text(); + + const majorMatch = content.match(/MAJOR_VERSION\s*=\s*(\d+)/); + const minorMatch = content.match(/MINOR_VERSION\s*=\s*(\d+)/); + const tinyMatch = content.match(/TINY_VERSION\s*=\s*(\d+)/); + + if (majorMatch && minorMatch && tinyMatch) { + const version = `${majorMatch[1]}.${minorMatch[1]}.${tinyMatch[1]}`; + webkitVersionCache.set(commitHash, version); + return version; + } + + console.warn( + chalk`{yellow Warning: Could not parse version numbers from Version.xcconfig for commit ${commitHash}}`, + ); + webkitVersionCache.set(commitHash, undefined); + return undefined; + } catch (error) { + console.warn( + chalk`{yellow Warning: Error fetching WebKit version for commit ${commitHash}: ${error}}`, + ); + webkitVersionCache.set(commitHash, undefined); + return undefined; + } +}; + +/** + * Gets Bun version info from the versions data. + * @param versionInfo - The version info object from the API. + * @returns An object containing webkitRev and bunRevision, if available. + */ +const getBunInfoFromVersionData = async ( + versionInfo: BunVersionInfo, +): Promise<{ webkitRev?: string; bunRevision?: string }> => { + const webkitCommitHash = versionInfo.versions?.webkit; + const bunRevision = versionInfo.revision; + let webkitRev: string | undefined; + + if (webkitCommitHash) { + webkitRev = await fetchWebKitVersion(webkitCommitHash); + } + + if (webkitRev || bunRevision) { + console.log( + chalk`{gray Bun: webkit=${webkitRev ?? 'unknown'} bun-revision=${bunRevision || 'unknown'}}`, + ); + } + + return { webkitRev, bunRevision }; +}; + +/** + * Updates the Bun releases. + * @param options - The options. + * @param options.bcdBrowserName - The name of the browser in the BCD file. + * @param options.bcdFile - The path to the BCD file. + * @param options.browserName - The name of the browser. + * @returns The result. + */ +export const updateBunReleases = async (options: { + bcdBrowserName: 'bun'; + bcdFile: string; + browserName: string; +}) => { + const browser = options.bcdBrowserName; + + let fileText: string; + try { + fileText = await fs.readFile(options.bcdFile, 'utf-8'); + } catch { + return gfmNoteblock( + 'NOTE', + `**${options.browserName ?? 'Bun'}**: No browser data file found at ${options.bcdFile}. Add a seed file (e.g., browsers/bun.json) before running updates.`, + ); + } + + const data: CompatData = JSON.parse(fileText); + + let result = ''; + + let versionsData: BunVersionsResponse; + try { + versionsData = await fetchVersions(); + } catch (e) { + return gfmNoteblock( + 'WARNING', + `**${options.browserName ?? 'Bun'}**: Failed to fetch versions data (${e}).`, + ); + } + + interface Stable { + version: string; + date?: string; + url?: string; + info: BunVersionInfo; + } + + const stableReleases: Stable[] = []; + let latestVersion: string | null = null; + + for (const [version, info] of Object.entries(versionsData.releases)) { + // Only include versions >= 1.0.0 + if (compareVersions(version, '1.0.0') < 0) { + continue; + } + + stableReleases.push({ + version, + date: info.release_date, + url: info.release_notes, + info, + }); + + if (info.status === 'current') { + latestVersion = version; + } + } + + stableReleases.sort((a, b) => compareVersions(a.version, b.version)); + + if (stableReleases.length === 0) { + return gfmNoteblock( + 'NOTE', + `**${options.browserName ?? 'Bun'}**: No stable releases found since v1.0.0.`, + ); + } + + if (!latestVersion) { + latestVersion = stableReleases[stableReleases.length - 1].version; + } + + const latest = + stableReleases.find((r) => r.version === latestVersion) || + stableReleases[stableReleases.length - 1]; + + for (const rel of stableReleases) { + const status = rel.version === latest.version ? 'current' : 'retired'; + result += createOrUpdateBrowserEntry( + data, + browser, + rel.version, + status, + undefined, + undefined, + rel.date, + rel.url, + ); + + const entry = data.browsers[browser].releases[rel.version]; + + if (entry) { + const { webkitRev } = await getBunInfoFromVersionData(rel.info); + + if (webkitRev) { + entry.engine = 'WebKit'; + entry.engine_version = webkitRev; + } + } + } + + const existing = Object.keys(data.browsers[browser].releases ?? {}); + for (const v of existing) { + if (v !== latest.version) { + result += updateBrowserEntry( + data, + browser, + v, + undefined, + 'retired', + undefined, + undefined, + ); + } + } + + await fs.writeFile(`./${options.bcdFile}`, stringify(data) + '\n'); + + if (result) { + result = `### Updates for ${options.browserName ?? 'Bun'}\n${result}`; + } + + return result; +}; diff --git a/scripts/update-browser-releases/index.ts b/scripts/update-browser-releases/index.ts index 38a83569b2dcfa..59503c70e63075 100644 --- a/scripts/update-browser-releases/index.ts +++ b/scripts/update-browser-releases/index.ts @@ -2,6 +2,7 @@ * See LICENSE file for more information. */ import yargs from 'yargs'; +import { updateBunReleases } from './bun.js'; import { updateChromiumReleases } from './chrome.js'; import { updateEdgeReleases } from './edge.js'; import { updateFirefoxReleases } from './firefox.js'; @@ -40,6 +41,11 @@ const argv = yargs(process.argv.slice(2)) type: 'boolean', group: 'Engine selection:', }) + .option('bun', { + describe: 'Update Bun', + type: 'boolean', + group: 'Engine selection:', + }) .option('all', { describe: 'Update all browsers (default)', type: 'boolean', @@ -72,7 +78,8 @@ const updateAllBrowsers = argv['firefox'] || argv['edge'] || argv['opera'] || - argv['safari'] + argv['safari'] || + argv['bun'] ); const updateChrome = argv['chrome'] || updateAllBrowsers; const updateWebview = argv['webview'] || updateAllBrowsers; @@ -80,6 +87,7 @@ const updateFirefox = argv['firefox'] || updateAllBrowsers; const updateEdge = argv['edge'] || updateAllBrowsers; const updateOpera = argv['opera'] || updateAllBrowsers; const updateSafari = argv['safari'] || updateAllBrowsers; +const updateBun = argv['bun'] || updateAllBrowsers; const updateAllDevices = argv['alldevices'] || !(argv['mobile'] || argv['desktop']); const updateMobile = argv['mobile'] || updateAllDevices; @@ -217,6 +225,11 @@ const options = { 'https://developer.apple.com/tutorials/data/documentation/safari-release-notes.json', releaseNoteURLBase: 'https://developer.apple.com', }, + bun: { + browserName: 'Bun', + bcdFile: './browsers/bun.json', + bcdBrowserName: 'bun', + } as const, }; const results = await Promise.all([ @@ -249,6 +262,7 @@ const results = await Promise.all([ updateMobile && updateSafariReleases(options.webview_ios), ] : []), + updateBun && updateBunReleases(options.bun), ]); const result = results.filter(Boolean).join('\n\n');