https://github.com/Microsoft/TypeScript
Raw File
Tip revision: 63ed5b0329bee2d9781b7dd8468778e0810d7a9b authored by Anders Hejlsberg on 17 October 2019, 21:14:12 UTC
Accept new baselines
Tip revision: 63ed5b0
createLanguageServiceBuild.ts
/// <reference types="node"/>
import { join } from "path";
import { readFileSync, unlinkSync } from "fs";
import { tmpdir } from "os";
import { execSync, ExecSyncOptions } from "child_process";
import chalk from "chalk";

interface PackageJson {
    name: string;
    version: string
}

const exec = (cmd: string, opts?: ExecSyncOptions) => {
    console.log(chalk.gray(`> ${cmd} ${opts ? JSON.stringify(opts) : ""}`));
    execSync(cmd, opts);
};

const step = (msg: string) => {
    console.log("\n\n" + chalk.bold("- ") + msg);
};

function main(): void {
    console.log(chalk.bold("## Creating the language services build of TypeScript"));
    process.stdout.write(chalk.grey("> node /scripts/createLanguageServiceBuild.ts"));

    // Create a tarball of the current version
    step("Packing the current TypeScript via npm.");
    exec("npm pack");

    const packageJsonValue: PackageJson = JSON.parse(readFileSync("package.json", "utf8"));
    const tarballFileName = `${packageJsonValue.name}-${packageJsonValue.version}.tgz`;

    const unzipDir = tmpdir();
    step(`Extracting the built version into a temporary folder. ${unzipDir}/package`);
    exec(`tar -xvzf ${tarballFileName} -C ${unzipDir}`);
    unlinkSync(tarballFileName);

    step(`Updating the build metadata`);
    const packagePath = join(unzipDir, "package");
    exec(`node scripts/configureLanguageServiceBuild.js ${join(packagePath, "package.json")}`);

    step(`Deploying the language service`);
    exec("npm publish --access public", { cwd: packagePath });
}

main();
back to top