54 lines
1.9 KiB
TypeScript
Raw Normal View History

import * as fs from "fs";
import { assert } from "tsafe";
import type { Equals } from "tsafe";
import { z } from "zod";
2024-01-30 06:37:49 +01:00
import { join as pathJoin } from "path";
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[];
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;
themeName?: string | string[];
doBuildRetrocompatAccountTheme?: boolean;
};
};
2024-01-30 05:54:36 +01:00
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(),
"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(),
"themeName": z.union([z.string(), z.array(z.string())]).optional(),
"doBuildRetrocompatAccountTheme": z.boolean().optional()
})
.optional()
});
assert<Equals<ReturnType<(typeof zParsedPackageJson)["parse"]>, ParsedPackageJson>>();
2024-01-30 00:06:17 +01:00
let parsedPackageJson: undefined | ParsedPackageJson;
2024-01-30 06:55:26 +01:00
export function readParsedPackageJson(params: { reactAppRootDirPath: string }) {
2023-09-03 23:26:34 +02:00
const { reactAppRootDirPath } = params;
2023-04-02 03:10:16 +02:00
if (parsedPackageJson) {
return parsedPackageJson;
}
2023-09-03 23:26:34 +02:00
parsedPackageJson = zParsedPackageJson.parse(JSON.parse(fs.readFileSync(pathJoin(reactAppRootDirPath, "package.json")).toString("utf8")));
return parsedPackageJson;
2023-04-02 03:10:16 +02:00
}