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 }; }