keycloak_theme/scripts/link-in-starter.ts

61 lines
1.7 KiB
TypeScript
Raw Normal View History

import * as child_process from "child_process";
import * as fs from "fs";
import { join } from "path";
2024-05-20 21:10:58 +02:00
import { waitForDebounceFactory } from "powerhooks/tools/waitForDebounce";
import chokidar from "chokidar";
import * as runExclusive from "run-exclusive";
import { Deferred } from "evt/tools/Deferred";
import chalk from "chalk";
2024-05-20 15:48:51 +02:00
fs.rmSync("node_modules", { recursive: true, force: true });
fs.rmSync("dist", { recursive: true, force: true });
fs.rmSync(".yarn_home", { recursive: true, force: true });
run("yarn install");
run("yarn build");
2024-05-20 15:48:51 +02:00
fs.rmSync(join("..", "keycloakify-starter", "node_modules"), {
recursive: true,
force: true
});
2024-05-20 15:48:51 +02:00
run("yarn install", { cwd: join("..", "keycloakify-starter") });
run(`npx ts-node --skipProject ${join("scripts", "link-in-app.ts")} keycloakify-starter`);
2024-05-20 21:10:58 +02:00
const { waitForDebounce } = waitForDebounceFactory({ delay: 400 });
const runYarnBuild = runExclusive.build(async () => {
2024-05-20 21:47:06 +02:00
console.log(chalk.green("Running `yarn build`"));
2024-05-20 21:10:58 +02:00
const dCompleted = new Deferred<void>();
const child = child_process.spawn("yarn", ["build"], {
env: process.env
});
child.stdout.on("data", data => process.stdout.write(data));
child.stderr.on("data", data => process.stderr.write(data));
child.on("exit", () => dCompleted.resolve());
await dCompleted.pr;
2024-05-20 21:47:06 +02:00
console.log("\n\n");
2024-05-20 21:10:58 +02:00
});
console.log(chalk.green("Watching for changes in src/"));
chokidar.watch("src", { ignoreInitial: true }).on("all", async () => {
await waitForDebounce();
runYarnBuild();
});
function run(command: string, options?: { cwd: string }) {
console.log(`$ ${command}`);
2024-05-20 15:48:51 +02:00
child_process.execSync(command, { stdio: "inherit", ...options });
}