65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
|
import * as fs from "fs";
|
||
|
import { join as pathJoin, relative as pathRelative } from "path";
|
||
|
import { crawl } from "./tools/crawl";
|
||
|
import { downloadAndUnzip } from "./tools/downloadAndUnzip";
|
||
|
import { keycloakBuiltinThemesAndThirdPartyExamplesThemsUrl } from "./download-sample-keycloak-themes";
|
||
|
import { getProjectRoot } from "./tools/getProjectRoot";
|
||
|
import * as child_process from "child_process";
|
||
|
|
||
|
//@ts-ignore
|
||
|
const propertiesParser = require("properties-parser");
|
||
|
|
||
|
console.log(propertiesParser);
|
||
|
|
||
|
const tmpDirPath = pathJoin(getProjectRoot(), "tmp_xImOef9dOd44");
|
||
|
|
||
|
child_process.execSync(`rm -rf ${tmpDirPath}`);
|
||
|
|
||
|
downloadAndUnzip({
|
||
|
"destDirPath": tmpDirPath,
|
||
|
"url": keycloakBuiltinThemesAndThirdPartyExamplesThemsUrl
|
||
|
});
|
||
|
|
||
|
type Dictionary = { [idiomId: string]: string };
|
||
|
|
||
|
const record: { [typeOfPage: string]: { [language: string]: Dictionary } } = {};
|
||
|
|
||
|
process.chdir(pathJoin(tmpDirPath, "base"));
|
||
|
|
||
|
crawl(".").forEach(filePath => {
|
||
|
|
||
|
const match = filePath.match(/^([^/]+)\/messages\/messages_([^.]+)\.properties$/);
|
||
|
|
||
|
if (match === null) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
const [, typeOfPage, language] = match;
|
||
|
|
||
|
(record[typeOfPage] ??= {})[language] =
|
||
|
propertiesParser.parse(
|
||
|
fs.readFileSync(filePath)
|
||
|
.toString("utf8")
|
||
|
);
|
||
|
|
||
|
});
|
||
|
|
||
|
child_process.execSync(`rm -r ${tmpDirPath}`);
|
||
|
|
||
|
const targetFilePath = pathJoin("src", "lib", "i18n", "messages.generated.ts");
|
||
|
|
||
|
fs.writeFileSync(
|
||
|
pathJoin(getProjectRoot(), targetFilePath),
|
||
|
Buffer.from(
|
||
|
[
|
||
|
`//This code was automatically generated by running ${pathRelative(getProjectRoot(), __filename)}`,
|
||
|
'//PLEASE DO NOT EDIT MANUALLY',
|
||
|
'',
|
||
|
'/* spell-checker: disable */',
|
||
|
`export const messages= ${JSON.stringify(record, null, 2)} as const;`,
|
||
|
'/* spell-checker: enable */'
|
||
|
].join("\n"), "utf8")
|
||
|
);
|
||
|
|
||
|
console.log(`${targetFilePath} wrote`);
|