keycloak_theme/src/bin/shared/copyKeycloakResourcesToPublic.ts

90 lines
2.6 KiB
TypeScript
Raw Normal View History

2024-09-08 00:06:47 +02:00
import { join as pathJoin, dirname as pathDirname } from "path";
import { WELL_KNOWN_DIRECTORY_BASE_NAME } from "../shared/constants";
2024-05-18 10:24:55 +02:00
import { readThisNpmPackageVersion } from "../tools/readThisNpmPackageVersion";
import { assert } from "tsafe/assert";
import * as fs from "fs";
import { rmSync } from "../tools/fs.rmSync";
2024-06-09 09:15:16 +02:00
import type { BuildContext } from "./buildContext";
2024-09-08 00:06:47 +02:00
import { transformCodebase } from "../tools/transformCodebase";
import { getThisCodebaseRootDirPath } from "../tools/getThisCodebaseRootDirPath";
2024-09-08 00:06:47 +02:00
export type BuildContextLike = {
publicDirPath: string;
};
2024-06-09 09:15:16 +02:00
assert<BuildContext extends BuildContextLike ? true : false>();
2024-09-08 00:06:47 +02:00
export function copyKeycloakResourcesToPublic(params: {
2024-06-09 09:15:16 +02:00
buildContext: BuildContextLike;
2024-05-20 15:48:51 +02:00
}) {
2024-06-09 09:15:16 +02:00
const { buildContext } = params;
2024-09-08 00:06:47 +02:00
const destDirPath = pathJoin(
buildContext.publicDirPath,
WELL_KNOWN_DIRECTORY_BASE_NAME.DOT_KEYCLOAKIFY
);
const keycloakifyBuildinfoFilePath = pathJoin(destDirPath, "keycloakify.buildinfo");
const keycloakifyBuildinfoRaw = JSON.stringify(
{
2024-09-08 00:06:47 +02:00
keycloakifyVersion: readThisNpmPackageVersion()
},
null,
2
);
skip_if_already_done: {
if (!fs.existsSync(keycloakifyBuildinfoFilePath)) {
break skip_if_already_done;
}
2024-05-20 15:48:51 +02:00
const keycloakifyBuildinfoRaw_previousRun = fs
.readFileSync(keycloakifyBuildinfoFilePath)
.toString("utf8");
if (keycloakifyBuildinfoRaw_previousRun !== keycloakifyBuildinfoRaw) {
break skip_if_already_done;
}
return;
}
2024-05-20 15:48:51 +02:00
rmSync(destDirPath, { force: true, recursive: true });
2024-09-08 00:06:47 +02:00
// NOTE: To remove in a while, remove the legacy keycloak-resources directory
rmSync(pathJoin(pathDirname(destDirPath), "keycloak-resources"), {
force: true,
recursive: true
});
2024-05-20 15:48:51 +02:00
fs.mkdirSync(destDirPath, { recursive: true });
2024-05-18 04:48:04 +02:00
fs.writeFileSync(pathJoin(destDirPath, ".gitignore"), Buffer.from("*", "utf8"));
2024-09-08 00:06:47 +02:00
transformCodebase({
srcDirPath: pathJoin(
getThisCodebaseRootDirPath(),
WELL_KNOWN_DIRECTORY_BASE_NAME.RESOURCES
),
destDirPath
});
fs.writeFileSync(
pathJoin(destDirPath, "README.txt"),
Buffer.from(
// prettier-ignore
[
2024-09-08 00:06:47 +02:00
"This directory is only used in dev mode by Keycloakify",
"It won't be included in your final build.",
"Do not modify anything in this directory.",
].join("\n")
)
);
2024-05-20 15:48:51 +02:00
fs.writeFileSync(
keycloakifyBuildinfoFilePath,
Buffer.from(keycloakifyBuildinfoRaw, "utf8")
);
}