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`);