diff --git a/scripts/link-in-app.ts b/scripts/link-in-app.ts index a8df9afb..c7e1d5f6 100644 --- a/scripts/link-in-app.ts +++ b/scripts/link-in-app.ts @@ -43,12 +43,6 @@ fs.writeFileSync( ) ); -const destSrcDirPath = pathJoin(rootDirPath, "dist", "src"); - -fs.rmSync(destSrcDirPath, { recursive: true, force: true }); - -fs.cpSync(pathJoin(rootDirPath, "src"), destSrcDirPath, { recursive: true }); - const commonThirdPartyDeps = (() => { // For example [ "@emotion" ] it's more convenient than // having to list every sub emotion packages (@emotion/css @emotion/utils ...) diff --git a/scripts/link-in-starter.ts b/scripts/link-in-starter.ts index 05d29ede..a66234ab 100644 --- a/scripts/link-in-starter.ts +++ b/scripts/link-in-starter.ts @@ -1,6 +1,11 @@ import * as child_process from "child_process"; import * as fs from "fs"; import { join } from "path"; +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"; fs.rmSync("node_modules", { recursive: true, force: true }); fs.rmSync("dist", { recursive: true, force: true }); @@ -18,7 +23,31 @@ run("yarn install", { cwd: join("..", "keycloakify-starter") }); run(`npx ts-node --skipProject ${join("scripts", "link-in-app.ts")} keycloakify-starter`); -run(`npx chokidar '${join("src", "**", "*")}' -c 'yarn build'`); +const { waitForDebounce } = waitForDebounceFactory({ delay: 400 }); + +const runYarnBuild = runExclusive.build(() => { + const dCompleted = new Deferred(); + + 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()); + + return dCompleted.pr; +}); + +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}`);