keycloak_theme/src/bin/keycloakify/parsedPackageJson.ts

56 lines
2.0 KiB
TypeScript
Raw Normal View History

import * as fs from "fs";
import { assert } from "tsafe";
import type { Equals } from "tsafe";
import { z } from "zod";
import { pathJoin } from "../tools/pathJoin";
2023-04-02 03:10:16 +02:00
export type ParsedPackageJson = {
name: string;
2023-04-06 16:38:13 +02:00
version?: string;
homepage?: string;
keycloakify?: {
extraThemeProperties?: string[];
areAppAndKeycloakServerSharingSameDomain?: boolean;
artifactId?: string;
groupId?: string;
doCreateJar?: boolean;
2023-09-03 21:02:51 +02:00
loginThemeResourcesFromKeycloakVersion?: string;
2023-04-02 03:10:16 +02:00
reactAppBuildDirPath?: string;
keycloakifyBuildDirPath?: string;
2023-04-01 14:02:32 +02:00
themeName?: string;
2023-06-08 23:09:14 +02:00
extraThemeNames?: string[];
};
};
2023-04-05 20:04:54 +00:00
export const zParsedPackageJson = z.object({
"name": z.string(),
2023-04-06 16:38:13 +02:00
"version": z.string().optional(),
"homepage": z.string().optional(),
"keycloakify": z
.object({
"extraThemeProperties": z.array(z.string()).optional(),
"areAppAndKeycloakServerSharingSameDomain": z.boolean().optional(),
"artifactId": z.string().optional(),
"groupId": z.string().optional(),
"doCreateJar": z.boolean().optional(),
2023-09-03 21:02:51 +02:00
"loginThemeResourcesFromKeycloakVersion": z.string().optional(),
2023-04-02 03:10:16 +02:00
"reactAppBuildDirPath": z.string().optional(),
"keycloakifyBuildDirPath": z.string().optional(),
2023-06-08 23:09:14 +02:00
"themeName": z.string().optional(),
"extraThemeNames": z.array(z.string()).optional()
})
.optional()
});
assert<Equals<ReturnType<(typeof zParsedPackageJson)["parse"]>, ParsedPackageJson>>();
let parsedPackageJson: undefined | ReturnType<(typeof zParsedPackageJson)["parse"]>;
2023-04-02 03:10:16 +02:00
export function getParsedPackageJson(params: { projectDirPath: string }) {
const { projectDirPath } = params;
if (parsedPackageJson) {
return parsedPackageJson;
}
parsedPackageJson = zParsedPackageJson.parse(JSON.parse(fs.readFileSync(pathJoin(projectDirPath, "package.json")).toString("utf8")));
return parsedPackageJson;
2023-04-02 03:10:16 +02:00
}