keycloak_theme/src/bin/start-keycloak/keycloakifyBuild.ts

42 lines
1.3 KiB
TypeScript
Raw Normal View History

import { onlyBuildJarFileBasenameEnvName } from "../shared/constants";
import * as child_process from "child_process";
import { Deferred } from "evt/tools/Deferred";
import { assert } from "tsafe/assert";
2024-06-09 09:15:16 +02:00
import type { BuildContext } from "../shared/buildContext";
2024-06-09 09:15:16 +02:00
export type BuildContextLike = {
projectDirPath: string;
keycloakifyBuildDirPath: string;
bundler: "vite" | "webpack";
npmWorkspaceRootDirPath: string;
};
2024-06-09 09:15:16 +02:00
assert<BuildContext extends BuildContextLike ? true : false>();
export async function keycloakifyBuild(params: {
onlyBuildJarFileBasename: string | undefined;
2024-06-09 09:15:16 +02:00
buildContext: BuildContextLike;
}): Promise<{ isKeycloakifyBuildSuccess: boolean }> {
const { buildContext, onlyBuildJarFileBasename } = params;
const dResult = new Deferred<{ isSuccess: boolean }>();
const child = child_process.spawn("npx", ["keycloakify", "build"], {
2024-06-09 09:15:16 +02:00
cwd: buildContext.projectDirPath,
env: {
...process.env,
[onlyBuildJarFileBasenameEnvName]: onlyBuildJarFileBasename
}
});
child.stdout.on("data", data => process.stdout.write(data));
child.stderr.on("data", data => process.stderr.write(data));
child.on("exit", code => dResult.resolve({ isSuccess: code === 0 }));
const { isSuccess } = await dResult.pr;
return { isKeycloakifyBuildSuccess: isSuccess };
}