diff --git a/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts b/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts new file mode 100644 index 00000000..2ca60ffe --- /dev/null +++ b/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts @@ -0,0 +1,193 @@ + + +import cheerio from "cheerio"; +import { + replaceImportsFromStaticInJsCode, + replaceImportsInInlineCssCode, + generateCssCodeToDefineGlobals +} from "../replaceImportFromStatic"; +import fs from "fs"; +import { join as pathJoin } from "path"; +import { objectKeys } from "evt/tools/typeSafety/objectKeys"; +import { ftlValuesGlobalName } from "../ftlValuesGlobalName"; + +export const pageIds = [ + "login.ftl", "register.ftl", "info.ftl", + "error.ftl", "login-reset-password.ftl", + "login-verify-email.ftl", "terms.ftl", + "login-otp.ftl", "login-update-profile.ftl", + "login-idp-link-confirm.ftl" +] as const; + +export type PageId = typeof pageIds[number]; + +function loadAdjacentFile(fileBasename: string) { + return fs.readFileSync(pathJoin(__dirname, fileBasename)) + .toString("utf8"); +}; + +function loadFtlFile(ftlFileBasename: PageId | "common.ftl") { + try { + + return loadAdjacentFile(ftlFileBasename) + .match(/^', + ' ', + '' + ].join("\n") + }; + + const pageSpecificCodePlaceholder = ""; + + $("head").prepend( + [ + ...(Object.keys(cssGlobalsToDefine).length === 0 ? [] : [ + '', + '', + '' + ]), + ...["Object.deepAssign.js", "String.htmlUnescape.js"].map( + fileBasename => [ + "" + ].join("\n") + ), + '', + '', + pageSpecificCodePlaceholder, + '', + objectKeys(ftlCommonPlaceholders)[1] + ].join("\n"), + ); + + const partiallyFixedIndexHtmlCode = $.html(); + + function generateFtlFilesCode( + params: { + pageId: PageId; + } + ): { ftlCode: string; } { + + const { pageId } = params; + + const $ = cheerio.load(partiallyFixedIndexHtmlCode); + + const ftlPlaceholders = { + '{ "x": "kxOlLqMeOed9sdLdIdOxd444" }': loadFtlFile(pageId), + ...ftlCommonPlaceholders + }; + + let ftlCode = $.html() + .replace( + pageSpecificCodePlaceholder, + [ + '' + ].join("\n") + ); + + objectKeys(ftlPlaceholders) + .forEach(id => ftlCode = ftlCode.replace(id, ftlPlaceholders[id])); + + return { ftlCode }; + + } + + return { generateFtlFilesCode }; + + +} \ No newline at end of file diff --git a/src/bin/build-keycloak-theme/generateFtl/index.ts b/src/bin/build-keycloak-theme/generateFtl/index.ts index 2ca60ffe..de891f55 100644 --- a/src/bin/build-keycloak-theme/generateFtl/index.ts +++ b/src/bin/build-keycloak-theme/generateFtl/index.ts @@ -1,193 +1 @@ - - -import cheerio from "cheerio"; -import { - replaceImportsFromStaticInJsCode, - replaceImportsInInlineCssCode, - generateCssCodeToDefineGlobals -} from "../replaceImportFromStatic"; -import fs from "fs"; -import { join as pathJoin } from "path"; -import { objectKeys } from "evt/tools/typeSafety/objectKeys"; -import { ftlValuesGlobalName } from "../ftlValuesGlobalName"; - -export const pageIds = [ - "login.ftl", "register.ftl", "info.ftl", - "error.ftl", "login-reset-password.ftl", - "login-verify-email.ftl", "terms.ftl", - "login-otp.ftl", "login-update-profile.ftl", - "login-idp-link-confirm.ftl" -] as const; - -export type PageId = typeof pageIds[number]; - -function loadAdjacentFile(fileBasename: string) { - return fs.readFileSync(pathJoin(__dirname, fileBasename)) - .toString("utf8"); -}; - -function loadFtlFile(ftlFileBasename: PageId | "common.ftl") { - try { - - return loadAdjacentFile(ftlFileBasename) - .match(/^', - ' ', - '' - ].join("\n") - }; - - const pageSpecificCodePlaceholder = ""; - - $("head").prepend( - [ - ...(Object.keys(cssGlobalsToDefine).length === 0 ? [] : [ - '', - '', - '' - ]), - ...["Object.deepAssign.js", "String.htmlUnescape.js"].map( - fileBasename => [ - "" - ].join("\n") - ), - '', - '', - pageSpecificCodePlaceholder, - '', - objectKeys(ftlCommonPlaceholders)[1] - ].join("\n"), - ); - - const partiallyFixedIndexHtmlCode = $.html(); - - function generateFtlFilesCode( - params: { - pageId: PageId; - } - ): { ftlCode: string; } { - - const { pageId } = params; - - const $ = cheerio.load(partiallyFixedIndexHtmlCode); - - const ftlPlaceholders = { - '{ "x": "kxOlLqMeOed9sdLdIdOxd444" }': loadFtlFile(pageId), - ...ftlCommonPlaceholders - }; - - let ftlCode = $.html() - .replace( - pageSpecificCodePlaceholder, - [ - '' - ].join("\n") - ); - - objectKeys(ftlPlaceholders) - .forEach(id => ftlCode = ftlCode.replace(id, ftlPlaceholders[id])); - - return { ftlCode }; - - } - - return { generateFtlFilesCode }; - - -} \ No newline at end of file +export * from "./generateFtl"; \ No newline at end of file