62 lines
2.3 KiB
TypeScript
62 lines
2.3 KiB
TypeScript
import { assert } from "tsafe/assert";
|
|
import type { BuildOptions } from "./buildOptions";
|
|
import { getThemeSrcDirPath } from "./getThemeSrcDirPath";
|
|
import * as fs from "fs/promises";
|
|
import { join as pathJoin } from "path";
|
|
|
|
export type BuildOptionsLike = {
|
|
reactAppRootDirPath: string;
|
|
themeNames: string[];
|
|
environmentVariables: { name: string; default: string }[];
|
|
};
|
|
|
|
assert<BuildOptions extends BuildOptionsLike ? true : false>();
|
|
|
|
export async function generateKcGenTs(params: {
|
|
buildOptions: BuildOptionsLike;
|
|
}): Promise<void> {
|
|
const { buildOptions } = params;
|
|
|
|
const { themeSrcDirPath } = getThemeSrcDirPath({
|
|
reactAppRootDirPath: buildOptions.reactAppRootDirPath
|
|
});
|
|
|
|
await fs.writeFile(
|
|
pathJoin(themeSrcDirPath, "kc.gen.ts"),
|
|
Buffer.from(
|
|
[
|
|
`/* prettier-ignore-start */`,
|
|
``,
|
|
`/* eslint-disable */`,
|
|
``,
|
|
`// @ts-nocheck`,
|
|
``,
|
|
`// noinspection JSUnusedGlobalSymbols`,
|
|
``,
|
|
`// This file is auto-generated by Keycloakify`,
|
|
``,
|
|
`export type ThemeName = ${buildOptions.themeNames.map(themeName => `"${themeName}"`).join(" | ")};`,
|
|
``,
|
|
`export const themeNames: ThemeName[] = [${buildOptions.themeNames.map(themeName => `"${themeName}"`).join(", ")}];`,
|
|
``,
|
|
`export type KcEnvName = ${buildOptions.environmentVariables.length === 0 ? "never" : buildOptions.environmentVariables.map(({ name }) => `"${name}"`).join(" | ")};`,
|
|
``,
|
|
`export const KcEnvNames: KcEnvName[] = [${buildOptions.environmentVariables.map(({ name }) => `"${name}"`).join(", ")}];`,
|
|
``,
|
|
`export const kcEnvDefaults: Record<KcEnvName, string> = ${JSON.stringify(
|
|
Object.fromEntries(
|
|
buildOptions.environmentVariables.map(
|
|
({ name, default: defaultValue }) => [name, defaultValue]
|
|
)
|
|
),
|
|
null,
|
|
2
|
|
)};`,
|
|
``,
|
|
`/* prettier-ignore-end */`
|
|
].join("\n"),
|
|
"utf8"
|
|
)
|
|
);
|
|
}
|