//@ts-check const fs = require("fs"); const path = require("path"); const { execSync } = require("child_process"); const puppeteer = require("puppeteer"); const jscompDir = path.join(__dirname, "..", "jscomp"); const keywordsFile = path.join(jscompDir, "keywords.list"); const reservedMap = path.join(jscompDir, "ext", "js_reserved_map.ml"); (async function () { const browser = await puppeteer.launch(); const page = await browser.newPage(); /** * @type string[] */ const result = await page.evaluate(`Object.getOwnPropertyNames(window)`); fs.writeFileSync( keywordsFile, result .filter(x => /^[A-Z]/.test(x)) .sort() .join("\n"), "utf8" ); await browser.close(); execSync(`ocaml build_reserved.ml ${keywordsFile} ${reservedMap}`, { cwd: __dirname, }); })();