1import fs from "fs-extra"; 2import path from "path"; 3import glob from "glob"; 4import url from "url"; 5import del from "del"; 6import { localizationDirectories } from "./build/localization.mjs"; 7 8const __filename = url.fileURLToPath(new URL(import.meta.url)); 9const __dirname = path.dirname(__filename); 10 11const root = path.join(__dirname, ".."); 12const source = path.join(root, "built/local"); 13const dest = path.join(root, "lib"); 14 15async function produceLKG() { 16 console.log(`Building LKG from ${source} to ${dest}`); 17 await del(`${dest.replace(/\\/g, "/")}/**`, { ignore: ["**/README.md"] }); 18 await fs.mkdirp(dest); 19 await copyLibFiles(); 20 await copyLocalizedDiagnostics(); 21 await copyTypesMap(); 22 await copyScriptOutputs(); 23 await copyDeclarationOutputs(); 24 await writeGitAttributes(); 25} 26 27async function copyLibFiles() { 28 await copyFilesWithGlob("lib?(.*).d.ts"); 29} 30 31async function copyLocalizedDiagnostics() { 32 for (const d of localizationDirectories) { 33 const fileName = path.join(source, d); 34 if (fs.statSync(fileName).isDirectory()) { 35 await fs.copy(fileName, path.join(dest, d)); 36 } 37 } 38} 39 40async function copyTypesMap() { 41 await copyFromBuiltLocal("typesMap.json"); // Cannot accommodate copyright header 42} 43 44async function copyScriptOutputs() { 45 await copyFromBuiltLocal("cancellationToken.js"); 46 await copyFromBuiltLocal("tsc.js"); 47 await copyFromBuiltLocal("tsserver.js"); 48 await copyFromBuiltLocal("tsserverlibrary.js"); 49 await copyFromBuiltLocal("typescript.js"); 50 await copyFromBuiltLocal("typingsInstaller.js"); 51 await copyFromBuiltLocal("watchGuard.js"); 52} 53 54async function copyDeclarationOutputs() { 55 await copyFromBuiltLocal("tsserverlibrary.d.ts"); 56 await copyFromBuiltLocal("typescript.d.ts"); 57} 58 59async function writeGitAttributes() { 60 await fs.writeFile(path.join(dest, ".gitattributes"), `* text eol=lf`, "utf-8"); 61} 62 63/** 64 * @param {string} fileName 65 */ 66async function copyFromBuiltLocal(fileName) { 67 await fs.copy(path.join(source, fileName), path.join(dest, fileName)); 68} 69 70/** 71 * @param {string} pattern 72 */ 73async function copyFilesWithGlob(pattern) { 74 const files = glob.sync(pattern, { cwd: source }).map(f => path.basename(f)); 75 for (const f of files) { 76 await copyFromBuiltLocal(f); 77 } 78 console.log(`Copied ${files.length} files matching pattern ${pattern}`); 79} 80 81process.on("unhandledRejection", err => { 82 throw err; 83}); 84produceLKG().then(() => console.log("Done"), err => { 85 throw err; 86}); 87