• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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