keycloak_theme/src/bin/shared/customHandler_delegate.ts

49 lines
1.4 KiB
TypeScript
Raw Normal View History

2024-10-05 20:30:09 +02:00
import { assert, type Equals } from "tsafe/assert";
import type { BuildContext } from "./buildContext";
import { CUSTOM_HANDLER_ENV_NAMES } from "./constants";
import {
NOT_IMPLEMENTED_EXIT_CODE,
type CommandName,
BIN_NAME,
ApiVersion
} from "./customHandler";
import * as child_process from "child_process";
2024-11-02 22:39:03 +01:00
import { getNodeModulesBinDirPath } from "../tools/nodeModulesBinDirPath";
2024-10-05 20:30:09 +02:00
import * as fs from "fs";
assert<Equals<ApiVersion, "v1">>();
export function maybeDelegateCommandToCustomHandler(params: {
2024-10-05 20:30:09 +02:00
commandName: CommandName;
buildContext: BuildContext;
}): { hasBeenHandled: boolean } {
2024-10-05 20:30:09 +02:00
const { commandName, buildContext } = params;
2024-11-02 22:39:03 +01:00
const nodeModulesBinDirPath = getNodeModulesBinDirPath();
2024-10-25 00:01:12 +00:00
if (!fs.readdirSync(nodeModulesBinDirPath).includes(BIN_NAME)) {
return { hasBeenHandled: false };
2024-10-05 20:30:09 +02:00
}
try {
child_process.execSync(`npx ${BIN_NAME}`, {
stdio: "inherit",
env: {
...process.env,
[CUSTOM_HANDLER_ENV_NAMES.COMMAND_NAME]: commandName,
[CUSTOM_HANDLER_ENV_NAMES.BUILD_CONTEXT]: JSON.stringify(buildContext)
}
});
2024-10-05 22:28:36 +02:00
} catch (error: any) {
2024-10-06 06:41:51 +02:00
const status = error.status;
2024-10-05 22:28:36 +02:00
2024-10-06 06:41:51 +02:00
if (status === NOT_IMPLEMENTED_EXIT_CODE) {
return { hasBeenHandled: false };
2024-10-05 20:30:09 +02:00
}
2024-10-06 06:41:51 +02:00
process.exit(status);
2024-10-05 20:30:09 +02:00
}
return { hasBeenHandled: true };
2024-10-05 20:30:09 +02:00
}