-
Notifications
You must be signed in to change notification settings - Fork 132
/
Copy pathgenerate_web_symbols.ts
57 lines (52 loc) · 1.58 KB
/
generate_web_symbols.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Copyright 2024 the JSR authors. All rights reserved. MIT license.
import { Identifier } from "npm:@mdn/browser-compat-data";
import data from "npm:@mdn/browser-compat-data" with { type: "json" };
const webBuiltins: { id: string[]; docs: string }[] = [];
function walk(identifier: Identifier, id: string[] = []) {
if (
identifier.__compat?.mdn_url &&
!(id.at(-1)?.includes("_") ||
id.at(-1)?.[0].toLowerCase() === id.at(-1)?.[0])
) {
webBuiltins.push({ id, docs: identifier.__compat.mdn_url });
}
for (const key in identifier) {
if (key === "__compat") continue;
if (
id.length > 0 &&
(id.at(-1) === key ||
key[0].toLowerCase() === key[0] ||
key.includes("_"))
) return;
walk(identifier[key], [...id, key]);
}
}
walk(data.javascript.builtins);
walk(data.api);
webBuiltins.push({
id: ["bigint"],
docs: data.javascript.builtins.BigInt.__compat!.mdn_url!,
});
webBuiltins.push({
id: ["boolean"],
docs: data.javascript.builtins.Boolean.__compat!.mdn_url!,
});
webBuiltins.push({
id: ["number"],
docs: data.javascript.builtins.Number.__compat!.mdn_url!,
});
webBuiltins.push({
id: ["object"],
docs: data.javascript.builtins.Object.__compat!.mdn_url!,
});
webBuiltins.push({
id: ["string"],
docs: data.javascript.builtins.String.__compat!.mdn_url!,
});
webBuiltins.push({
id: ["symbol"],
docs: data.javascript.builtins.Symbol.__compat!.mdn_url!,
});
console.log(Object.keys(data.javascript.builtins));
const output = JSON.stringify(webBuiltins, null, 2);
await Deno.writeTextFile("./api/src/docs/web_builtins.json", output);